2011-11-29 100 views
7

如何知道遍歷DOM的內容?關於jQuery選擇器如何遍歷dom的一些問題

$('div p') 

看起來這將返回所有的div元素,然後再執行另一次掃描爲在第一個div搜索返回的每個DOM元素的P元素。

$('div .foo') 

這個班級似乎沒有掃描dom。它們只爲包含foo類的元素過濾前面的列表$('div')。如果$('div')的孩子擁有foo類,它就不會被選中。

$('div, div') 

不包含愚蠢。所以它似乎只用一個lambdas列表掃描一次,不管是比較還是不匹配。但是當你有如下的過濾器時,這會變得非常混亂:contains('x')看起來好像他們可以自己遞歸dom。

那麼這些選擇器如何工作? 'div .foo'是否只針對div進行遍歷,然後對包含foo的類進行過濾,或者以某種方式將其轉化爲計算,說明標記== Div & & class == foo。什麼時候有多個選擇器?他們按照他們出現在頁面上的順序出現,沒有任何愚蠢的行爲,讓我覺得它只能掃描一次dom。也許它只是在返回之前對它們進行分類和刪除?

+2

從技術上講,'$(div .foo)'所做的是查找所有'.foo'元素,然後過濾那些'div'。 – Blazemonger

+1

至於獨特的結果 - 看看https://github.com/jquery/jquery/blob/master/src/traversing.js#L40。 – pimvdb

+3

@ mblase75 NO !!它檢查DIV元素中的所有類foo! – TeChn4K

回答

2

jQuery根據最快的東西來優化它的選擇器。如果有一個本地瀏覽器支持獲取元素的方法(getElementById等),它將使用它,否則它將基於本機支持的方法的結果進行過濾。