2012-07-07 74 views
1

我很好奇。这个:

$('div'), this $($('div')), and this $($($('div')))... and so on 

看起来,所有的工作都是作为HTML元素的选择器。有谁知道为什么这会起作用,如果有任何实际的(除了冗余),这样做时会出现问题吗?

http://jsfiddle.net/NpT2b/

回答

7

jQuery的功能,可以将现有的jQuery对象作为参数。这是记录和故意的行为。看看这里的手册:http://api.jquery.com/jQuery/

它也不是特定于HTML元素。 $($('#foo'))会起作用。此

的原因之一,我已经在过去开发是让一个函数接受要么选择一个jQuery对象。所以,我可以写一个函数:

function excite(target) { 
    $(target).append(' This is exciting!'); 
}; 

这是安全与excite('.foo');excite($('p:not(.exciting-already)').empty());

+0

+1这样一个令人兴奋的答案。 :-) – 2012-07-07 20:53:34

+0

非常好的解释。荣誉指出该对象实际上是克隆的。感谢大家 – TaylorMac 2012-07-07 21:00:00

2

jQuery选择采取任一字符串,HTML元素,或作为选择其他的jQuery对象。在这种情况下,您的第一个示例将选择页面上的所有<div>元素。在第二个示例中,您将重新选择所有<div>元素的jQuery集。在你的第三个例子中,你重新选择了这个集合。除了彻底和完整的冗余之外,这可以无限期地继续下去而不会出现任何问题。

3

如果jQuery收到一个jQuery对象,它不需要做任何事情,因此返回jQuery对象不变。

这通常是为了对付不法程序员,谁可能会不小心把一个jQuery对象背透$()

+0

好点的调用。 +1为什么这是低调的? – 2012-07-07 20:49:03

+2

我想这是因为通过'$()'放置一个jQuery对象没有任何不择手段。这是a)在更广泛的视角中不可避免的,b)jQuery工作得很好的原因之一。 – Tomalak 2012-07-07 20:50:45

+1

我还没有测试过这个,但根据文档,该对象实际上是克隆的,没有被返回原状。这很重要,例如,如果我做了'var a = $('p'); var b = $(a); b.add('td');' – VoteyDisciple 2012-07-07 20:54:46

相关问题