2011-01-05 3 views
14

DOMからすべてのリーフノードを取得するにはどうすればいいですか?私はこのための簡単で魔法の選択肢がない場合、最適な解決策を考えようとしています。私は "reachedElem.find( 'div')。length == 0"を使用することを考えましたが、これが正しい方向であるかどうかはわかりません。何か案が?おかげで、セレクタの上jQueryを使用してリーフノードを取得する最も効率的な方法はどれですか

答えて

32

あなたは以下のセレクターで行くことができる

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

は、子を持たないすべてのdiv要素を選択します。

+0

ありがとうございました。ツリーの「最後の」div要素であるdivをすべて検索する場合にも適用されますか?私が正しく説明しているかどうかはわかりません。 divからdiv以外の要素をすべて削除するとします。今はすべての葉に尋ねるのと同じです。 – Ricardo

+1

@Ricardo、子なしのDOM要素はすべて葉です。特定の要素の下の葉だけを探したい場合は、最初に要素を選択し、eHussainのセレクタを.find()メソッドに入れて、すべての祖先を検索します。 – Soviut

+0

ソビウットに感謝しますが、それは私が意味するワットではありません。私は、DOM内の "div"を子として持つ "div"をすべて選択することを意味します。基本的にすべての最下位レベルのdivs。 – Ricardo

10

あなたが本当に効率的な何かをしたい場合は、複雑な:not(:has(*))セレクタ避ける:

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

を私はそれがeHussainの提案の倍の効率的だ、またはさらに速く分かりました。

+0

'.children()'ではなく '.find( ':first')'です。 –

関連する問題