-2

我现在正在制作一个小脚本,主函数的 arg 的输入之一是一个元素。为了确保原始 JS 适用于这些东西,我正在做这些事情theelement.value来获取变量的值。不幸的是,如果thelement是一个 jquery 函数,例如$('#foo'). 我需要这种兼容性的其他一些原因是我需要访问theelement.stylejquery 不支持的东西。我知道这些(等)有 jquery 解决方法,.css(), .val()但如果我使用这些,那么常规的 js 输入(document.getElementbyId('foo'))将不起作用。有没有办法使用一个“属性”并使其对元素的所有输入都通用(包括来自原型和 Dojo 等库的东西)?

4

2 回答 2

1

不,不可能使所有东西都通用。

如果你想处理 DOM 元素,输入需要是 DOM 元素,并且框架都有办法取出 DOM 元素。你不能神奇地制作一个可以与任何库一起工作的脚本,这就是为什么通用插件通常具有库特定的扩展来添加支持。

于 2012-11-08T01:19:34.413 回答
0

在我看来,您有一个带有参数的函数,并且在将不同类型作为该参数传递时遇到了问题:

function doSomething(element) {
    // do something with element
}

您提到您希望元素有时是一个 jQuery 对象,有时只是一个 DOM 对象,然后您还提到了其他库(原型、Dojo)。

首先,如果您只是使用一致的类型调用您的函数,您的问题将完全消失。所有库中都可用的最简单的类型是 DOM 元素。因此,如果您只是强制将该元素作为 DOM 对象引用而不是 jQuery 对象或任何其他库对象传递,那么您的问题将完全消失。如果调用者正在使用其他库,然后想要调用您的函数,他们总是可以从该库中获取 DOM 对象并传递实际的 DOM 对象。例如,在 jQuery 中,您可以像这样获取 DOM 对象 `$("#foo").get(0)

如果你想让它更通用并接受多种类型,那么你必须编写代码来检测可能传递的每种类型,并从每种类型中获取 DOM 对象,这样你就可以对它们进行相同的处理。例如,如果你想检测 DOM 对象的 jQuery 对象,你可以这样做:

function doSomething(element) {
    // normalize element to be just a DOM object
    // if it's a jQuery object, then reach in to get the first DOM object
    if (element.jquery) {
        element = element.get(0);
    }

    // do something with element here which is a DOM object
}

如果您也想检测其他库中的对象,那么您必须为每个其他库编写类似的检测代码,并从其他库的对象中获取实际的 DOM 对象。

于 2012-11-08T01:21:30.673 回答