2012-11-08 43 views
-2

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

+3

我真的不清楚你在问什么。也就是说,所有这些库都应该允许您访问它们的API包装的原始元素。例如,如果你想通过jQuery获得一个(原始)DOM元素,你可以使用'$(“#foo”)[0]'。 – millimoose

+0

秒@millimoose建议。将所有非DOM元素参数转换为DOM元素。 – ZenMaster

回答

1

不,不可能让所有东西都具有普遍性。

如果您想处理DOM元素,则输入需要是DOM元素,而framworks都可以获取DOM元素。你不能奇迹般地制作一个可以与任何库一起工作的脚本,这就是为什么通用插件通常有库特定的扩展来添加支持。

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对象。