我很好奇。這個:
$('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