2010-06-08 100 views
32

我可能會誤解發生了什麼,但從我可以告訴我得到一個DOM元素,而不是一個jQuery對象,當我使用.each()jQuery .each()返回DOM元素,而不是一個jQuery對象

以下將不作爲this工作指的是DOM元素,而不是一個jQuery對象

$("span[id$='_TotalItemCost']").each(function() { 
    var someText = this.text(); 
}); 

修改變換this到jQuery對象,一切都很好

$("span[id$='_TotalItemCost']").each(function() { 
    var someText = $(this).text(); 
}); 

有什麼時髦與我的選擇? jQuery .each() documentation是錯誤的,它不是一個jQuery對象,而是由.each()返回的DOM元素?

回答

37

文檔沒有錯,但您可能會誤解jQuery對象是什麼。

jQuery對象由$()函數返回。因此$("span[id$='_TotalItemCost']")是一個jQuery對象,它包含所選的每個span元素。使用.each()將迭代包含在jQuery對象中的元素。這就是爲什麼這是一個DOM節點而不是一個jQuery對象。

您通過使用$(this)在此特定元素上使用jQuery方法做了正確的事情。

+2

此外,jQuery對象比DOM對象本身更重 - 如果我們在簡單的事情之後,我們中的一些人不想要額外的絨毛。 – 2010-06-08 20:39:49

+1

太棒了,只是在我錯過的文檔中發現了這個小知識*回調在當前DOM元素的上下文中被觸發,所以關鍵字'this'引用元素。* – ahsteele 2010-06-08 20:43:41

+2

$(expression).each(..)確實返回jquery實例進行鏈接。這可能是jQuery文檔所指的。 – 2013-05-31 11:05:47

3

@Vincent Robert,你幾乎完美地概括了它,但讓我稍微說一下。

即使JQuery是一個擴展其根實例的原型的函數,它的行爲更像一個對象。

如果你從方法/函數中分離對象並分別查看它們,你將會明白jQuery接口是如何構建的。

si認爲$()作爲一個對象,並且認爲each()作爲一種方法。你使用jQuery $()「選擇器」初始化一個對象,女巫反過來返回一個只包含從選擇器$()中選擇的elemetns /數據的對象。

然後,您可以直接在選定的內容上運行方法/函數,但方法不應該返回一個jquery對象,因爲大多數時間沒有返回節點,而只是字符串或布爾值,因此讓它們包裝在一個jQuery對象將毫無意義。

爲您的OP基於每個功能身邊,你並不意味着那裏收到一個jQuery對象,因爲每一個不是專門爲節點和元素,例如

例如設計,你會想在這裏一個jQuery對象?

$({a:'1',b:'2'}).each(function(){ 
}); 

這將是壞右,和毫無意義的,這就是爲什麼方法的確/不應該返回對象,除非法意返回一個單身或專爲對象返回設計。

另外,當我說對象時,我不是在談論json對象,而是方法/原型對象。

希望這會有所幫助。

相關問題