2011-01-05 4 views
14

DOM에서 divs라고하는 모든 리프 노드를 얻는 방법은 무엇입니까? 나는 이것을위한 쉽고 마법 같은 선택자가 없다면, 최적의 해결책을 생각하려고 노력하고있다. 나는 "reachedElem.find ('div'). length == 0"을 사용하는 것을 생각했지만 이것이 올바른 방향인지 확실하지 않습니다. 어떤 생각? 자식이없는 모든 div의 선택됩니다 선택을 선택 위jQuery를 사용하여 리프 노드를 얻는 가장 효율적인 방법은 무엇입니까

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

을 다음과 감사

답변

32

당신은 갈 수 있습니다.

+0

감사합니다. 트리의 "마지막"div 요소 인 모든 div를 찾고 싶다면 적용됩니까? 나는 그것을 정확하게 설명하고 있는지 확신 할 수 없다. DOM에서 div가 아닌 모든 요소를 ​​제거한다고 가정 해 보겠습니다. 이제 모든 리프를 묻는 것과 같을 것입니다. – Ricardo

+1

@Ricardo, 아이들이없는 DOM 요소는 리프입니다. 특정 요소 아래에 잎을 찾으려면 먼저 요소를 선택한 다음 eHussain의 선택기를 .find() 메서드에 넣어 모든 조상을 검색합니다. – Soviut

+0

감사합니다 Soviut,하지만 그건 내가 의미 와트되지 않습니다. 나는 더 많은 "divs"를 자식으로 가지지 않는 DOM의 "모든"div를 선택하고자 함을 의미합니다. 기본적으로 모든 가장 낮은 레벨 divs. – Ricardo

10

당신이 정말로 효율적으로 일을하려면 복잡한 :not(:has(*)) 선택하지 않도록 : 나는 그것이 더 빨리 eHussain의 제안 효율적, 또는 두 배의 발견

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

합니다.

+0

'.children()'보다 빠른 방법은'.find (': first')'입니다. –

관련 문제