2011-01-05 13 views

Odpowiedz

32

Możesz iść z następujących Selektor

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

Above selektor wybierze wszystkie DIV, którzy nie mają żadnych dzieci.

+0

Dzięki. Czy ma to również zastosowanie, jeśli chcę znaleźć wszystkie divy, które są "ostatnim" elementem div w drzewie? Nie jestem pewien, czy poprawiam to poprawnie. Powiedzmy, że eliminujesz wszystkie elementy, które nie są div z DOM. Teraz byłoby tak samo z pytaniem o wszystkie liście ... – Ricardo

+1

@Ricardo, każdy element DOM bez dzieci to liść. Jeśli chcesz tylko szukać liści pod konkretnym elementem, najpierw wybierz element, a następnie umieść selektor eHussaina w metodzie .find(), aby wyszukać wszystkich przodków. – Soviut

+0

dzięki Soviut, ale nie chodziło mi o wat. Chodzi mi o to, że chcę wybrać "wszystkie" divy w DOM, które nie mają więcej "divów" jako dzieci. Zasadniczo wszystkie najniższe poziomy div. – Ricardo

10

Jeśli naprawdę chcesz coś skutecznego, uniknąć skomplikowanej :not(:has(*)) selektora:

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

znalazłem się to dwa razy tak skuteczny jak sugestia eHussain, albo nawet szybciej.

+0

Jedną z szybszych metod niż '.children()' jest '.find (': first')'. –

Powiązane problemy