2011-01-05 20 views

Respuesta

32

Usted puede ir con selector siguiente

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

Por encima de selector se seleccionará todos los DIVs que no tienen hijos.

+0

Gracias. ¿También se aplica si quiero encontrar todos los div que son el "último" elemento div en el árbol? No estoy seguro si lo estoy explicando correctamente. Digamos que eliminas todos los elementos que no son divs del DOM. Ahora sería lo mismo que pedir todas las hojas .. – Ricardo

+1

@Ricardo, cualquier elemento DOM sin hijos es una hoja. Si solo desea buscar hojas debajo de un elemento particular, primero seleccione el elemento y luego ponga el selector de eHussain en un método .find() para buscar todos los antepasados. – Soviut

+0

gracias Soviut, pero eso no es lo que quise decir. Quiero decir que quiero seleccionar "todos" divs en el DOM que no tienen más "divs" como niños. Básicamente todos los divs del nivel más bajo ... – Ricardo

10

Si realmente quieres algo eficiente, evitar el complejo :not(:has(*)) selector:

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

descubrí que es dos veces tan eficiente como la sugerencia de eHussain, o incluso más rápido.

+0

Una manera más rápida que '.children()' es '.find (': first')'. –

Cuestiones relacionadas