2008-10-30 21 views
158

que tiene la siguiente estructura de nodos HTML:Count inmediatos elementos div niño utilizando jQuery

<div id="foo"> 
    <div id="bar"></div> 
    <div id="baz"> 
    <div id="biz"></div> 
    </div> 
    <span></span> 
</div> 

¿Cómo calculo el número de hijos inmediatos de foo, que son de tipo div? En el ejemplo anterior, el resultado debería ser dos (bar y baz).

+1

He añadido una prueba jsperf para ver la diferencia de velocidad entre los diferentes enfoques. ver mi respuesta a continuación – manikanta

Respuesta

305
$("#foo > div").length 

Hijos directos del elemento con el id 'foo' que son divs. A continuación, recupera el tamaño del conjunto envuelto producido.

+1

Me preguntaba el viernes cómo contar las columnas de la tabla con jQuery. Tendré que probar un enfoque similar: '$ ('# table> th'). Size()'. –

+22

. Se prefiere la longitud. http://api.jquery.com/size/ – ScottE

+1

A veces esto no funciona y tienes que usar $ ('# foo'). children(). size() que es más rápido de todos modos según @mrCoder – 472084

5
$('#foo > div').size() 
23
$("#foo > div") 

selecciona todos los divs que son descendientes inmediatos de #foo
una vez que tenga el conjunto de los niños se puede utilizar la función de tamaño:

$("#foo > div").size() 

o puede utilizar

$("#foo > div").length 

Ambos le devolverán el mismo resultado

2
var n_numTabs = $("#superpics div").size(); 

o

var n_numTabs = $("#superpics div").length; 

Como ya se ha dicho, ambos devuelven el mismo resultado.
Pero la función size() es más jQuery "P.C".
Tuve un problema similar con mi página.
Por el momento, solo omita el> y debería funcionar bien.

+0

Descendant Selector devolverá todos los descendientes de #superpics, incluyendo hijo, nieto, bisnieto, etc., de ese elemento, no solo hijos inmediatos – manikanta

+0

más jQuery "P.C". significa? –

0
$("div", "#superpics").size(); 
+1

Eso cuenta ** todos los descendientes ** 'div', no solo los hijos. –

62

recomiendo el uso de $('#foo').children().size() para un mejor rendimiento.

He creado una prueba jsperf para ver la diferencia de velocidad y el método children() batido el selector de hijo (#foo> div) Enfoque por lo menos el 60% en Chrome (canario acumulación v15) 20-30% en Firefox (v4).

Por cierto, no hace falta decir que estos dos enfoques producen los mismos resultados (en este caso, 1000).

[Actualización] He actualizado la prueba para incluir el tamaño() vs prueba de longitud, y ellos no lo convierte diferencia mucho (resultado: length uso es ligeramente más rápida (2%) que size())

[Actualizar] Debido al marcado incorrecto visto en el OP (antes de la actualización 'marcado validada' por mí), ambos $("#foo > div").length & $('#foo').children().length resultaron lo mismo (jsfiddle). Pero para la respuesta correcta para obtener SOLO 'div' hijos, uno debe usar selector de hijo para el correcto & mejor rendimiento

+0

aunque esta pregunta se hizo hace un tiempo, solo quería compartir para que esto pueda ayudar a alguien a partir de ahora – manikanta

+0

¿Dónde está filtrando solo los niños 'div'? –

+2

'.length' es, de hecho, el método preferido porque no tiene la sobrecarga de una llamada a función. –

7

En respuesta a mrCoders respuesta usando jsperf ¿por qué no usar el nodo DOM?

var $foo = $('#foo'); 
var count = $foo[0].childElementCount 

Usted puede tratar de la prueba aquí: http://jsperf.com/jquery-child-ele-size/7

Este método obtiene 46.095 op/s, mientras que los otros métodos en el mejor de 2000 op/s

+2

El OP pidió solo div elementos infantiles – dj18

1

Con la versión más reciente de jQuery, que pueda use $("#superpics div").children().length.

3
var divss = 0; 
$(function(){ 
    $("#foo div").each(function(){ 
    divss++; 

    }); 
    console.log(divss); 
});  
<div id="foo"> 
    <div id="bar" class="1"></div> 
    <div id="baz" class="1"></div> 
    <div id="bam" class="1"></div> 
</div> 
8
$('#foo').children('div').length 
+1

esto funciona con $ (esto) – shareef

+0

Lo tengo @shareef مرحبا –

Cuestiones relacionadas