我很好奇。这个:
$('div'), this $($('div')), and this $($($('div')))... and so on
看起来,所有的工作都是作为HTML元素的选择器。有谁知道为什么这会起作用,如果有任何实际的(除了冗余),这样做时会出现问题吗?
我很好奇。这个:
$('div'), this $($('div')), and this $($($('div')))... and so on
看起来,所有的工作都是作为HTML元素的选择器。有谁知道为什么这会起作用,如果有任何实际的(除了冗余),这样做时会出现问题吗?
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());
jQuery选择采取任一字符串,HTML元素,或作为选择其他的jQuery对象。在这种情况下,您的第一个示例将选择页面上的所有<div>
元素。在第二个示例中,您将重新选择所有<div>
元素的jQuery集。在你的第三个例子中,你重新选择了这个集合。除了彻底和完整的冗余之外,这可以无限期地继续下去而不会出现任何问题。
如果jQuery收到一个jQuery对象,它不需要做任何事情,因此返回jQuery对象不变。
这通常是为了对付不法程序员,谁可能会不小心把一个jQuery对象背透$()
好点的调用。 +1为什么这是低调的? – 2012-07-07 20:49:03
我想这是因为通过'$()'放置一个jQuery对象没有任何不择手段。这是a)在更广泛的视角中不可避免的,b)jQuery工作得很好的原因之一。 – Tomalak 2012-07-07 20:50:45
我还没有测试过这个,但根据文档,该对象实际上是克隆的,没有被返回原状。这很重要,例如,如果我做了'var a = $('p'); var b = $(a); b.add('td');' – VoteyDisciple 2012-07-07 20:54:46
+1这样一个令人兴奋的答案。 :-) – 2012-07-07 20:53:34
非常好的解释。荣誉指出该对象实际上是克隆的。感谢大家 – TaylorMac 2012-07-07 21:00:00