2011-01-05 26 views
14

如何從DOM獲取所有葉節點,比如說divs?我試圖想出一個最佳的解決方案,如果沒有簡單而神奇的選擇。我想過使用「reachedElem.find('div')。length == 0」,但我不確定這是否是正確的方向。任何想法?由於什麼是使用jQuery獲取葉節點的最有效方式

回答

32

你可以用以下的選擇

$('div:not(:has(*))') 

以上選擇將選擇所有沒有任何孩子誰的DIV。

+0

謝謝。如果我想查找樹中所有「div」元素的所有div,它是否也適用?我不確定我是否正確解釋。假設你消除了DOM中所有不是div的元素。現在這將是相同的要求所有的葉子.. – Ricardo 2011-01-05 09:30:00

+1

@Ricardo,沒有孩子的任何DOM元素是一片葉子。如果您只想在特定元素下查找樹葉,請首先選擇元素,然後將eHussain的選擇器放在.find()方法中以搜索所有祖先。 – Soviut 2011-01-05 09:36:57

+0

感謝Soviut,但那不是我的意思。我的意思是我想選擇DOM中沒有更多「div」作爲孩子的「所有」div。基本上所有的最低級別的div .. – Ricardo 2011-01-05 09:40:55

10

如果你真的想要的東西有效,避免了複雜的:not(:has(*))選擇:

$("div").filter(
    function(index) { 
     var isLeaf = $(this).children().length === 0; 
     return isLeaf; 
    } 
); 

我發現它的兩倍,高效的eHussain的建議,甚至更快。

+0

一種比'.children()'更快的方法是'.find(':first')'。 – 2016-06-09 17:34:44

相關問題