2012-07-07 80 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

相關問題