2011-04-20 30 views
3

我對jQuery核心有疑問。從文檔和幾本書我得到:澄清jQuery「包裝器」對象

var obj = $("div"); 

返回一個包裝對象AKA所選DOM元素的集合與其他方法。 (請隨時糾正我可能會說錯的任何內容)。我讀過jQuery函數$()返回一個包裝對象,或者它真的返回一個jQuery的副本加一個包裝元素的集合?

任何幫助是極大的讚賞。

乾杯

回答

5

它返回一個jQuery對象的實例,包你與你的CSS選擇器選擇的元素(在這種情況下,一個jQuery對象包裝所有的div文檔中)。

jQuery不是被「複製」的東西 - 它是包裹在DOM元素中的行爲。

var jqDivs = $("div"); 
var jqButtons = $("button"); 
var jqSubmitButton = $("button#submit"); 

這3個變量引用3個不同的對象。他們都實現了相同的jQuery行爲,但他們在不同的元素上執行。 jqDivs.hide()會隱藏div - jqButtons.hide()會隱藏按鈕,而jqSubmitButton.hide()只會隱藏id = submit的按鈕。

6

術語「包裝」對我有點誤導。 jQuery的保持引用由所提供的選擇器由調用返回的jQuery的實例的數字屬性匹配的元素,所以:

var allTheDivs = $('div'); 

返回與引用一個jQuery對象的文檔中的所有的div,和:

allTheDivs[0]; // or allTheDivs['0']; 

是對第一個的引用。所以,如果你然後做:

allTheDivs.hide(); 

它調用了jQuery實例的隱藏方法allTheDivs對所有涉及的元件其週期和隱藏它們。但不要嘗試:

allTheDivs['0'].hide() 

因爲這將嘗試調用隱藏 DOM元素,這可能不會存在,因此在出現錯誤restult上。