2012-09-02 17 views
18

Tengo un div con un lapso dentro de él. ¿Hay una manera de contar cuántos elementos en un div luego lo da como un valor. Por ejemplo, hubo 5 span en un div, entonces lo contaría y alertaría a cinco. En Javascript por favor.Cuenta cuántos elementos en un div

Gracias.

+0

[esto] (http://stackoverflow.com/questions/10381296/best-way-to-get -child-nodes) podría ser útil –

Respuesta

13

Puede utilizar esta función, evitará contar los TextNodes. Puede elegir contar los hijos de los niños (es decir,recursivo)

function getCount(parent, getChildrensChildren){ 
    var relevantChildren = 0; 
    var children = parent.childNodes.length; 
    for(var i=0; i < children; i++){ 
     if(parent.childNodes[i].nodeType != 3){ 
      if(getChildrensChildren) 
       relevantChildren += getCount(parent.childNodes[i],true); 
      relevantChildren++; 
     } 
    } 
    return relevantChildren; 
} 

Uso:

var element = document.getElementById("someElement"); 
alert(getCount(element, false)); // Simply one level 
alert(getCount(element, true)); // Get all child node count 

Pruébalo aquí: JS Fiddle

+0

thnx por la ayuda –

+0

No hay problema, de nada. Si esto resuelve el problema, no olvide marcarlo como la respuesta. Si necesita una explicación más detallada de cómo funciona, hágamelo saber. – Scott

1

Con jQuery se puede hacer así:

var count = $('div').children().length; 
alert(count);​​​ 

Aquí hay un violín: http://jsfiddle.net/dryYq/1/

+0

Esto fallará cuando haya anidado elementos en el div –

+3

¿En qué parte de la pregunta ve que el OP está utilizando jQuery? – jfriend00

+0

Gracias, funcionó –

3

Sin jQuery:

var element = document.getElementById("theElementId"); 
var numberOfChildren = element.children.length 

con jQuery:

var $element = $(cssSelectocr); 
var numberOfChildren = $element.children().length; 

Ambos th es devolver solo hijos inmediatos.

+0

Esto fallará cuando haya elementos anidados en el div. –

+0

La pregunta no es clara al respecto, solo asumí los primeros hijos. – Chango

2

con jQuery; Los cheques sólo para luces dentro de un div:

JSFiddle

$(function(){ 
    var numberOfSpans = $('#myDiv').children('span').length; 
    alert(numberOfSpans); 
})();​ 
+0

Agregue el código a su respuesta. –

+0

También esto falla con elementos anidados: http: // jsfiddle.net/FfcFM/1/ –

+0

Esta no es una pregunta jQuery. – jfriend00

14

Si desea que el número de descendientes, puede utilizar

var element = document.getElementById("theElementId"); 
var numberOfChildren = element.getElementsByTagName('*').length 

Pero si desea que el número de hijos inmediatos, utilice

element.childElementCount 

Ver el soporte del navegador aquí: http://help.dottoro.com/ljsfamht.php

o

element.children.length 

Véase el apoyo del navegador aquí: https://developer.mozilla.org/en-US/docs/DOM/Element.children#Browser_compatibility

+0

¡Excelente respuesta! '('*'). length' hace el truco :) – A1rPun

1

Para contar todos los elementos descendientes incluyendo elementos anidados en JavaScript llanura, hay varias opciones:

La más sencilla es probablemente la siguiente:

var count = parentElement.getElementsByTagName("*").length; 

Si desea la libertad de publicidad d más lógica alrededor de lo que se cuenta, puede recursivo a través del árbol local como esto:

function countDescendantElements(parent) { 
    var node = parent.firstChild, cnt = 0; 
    while (node) { 
     if (node.nodeType === 1) { 
      cnt++; 
      cnt += countDescendantElements(node); 
     } 
     node = node.nextSibling; 
    } 
    return(cnt); 
} 

Demostración de Trabajo: http://jsfiddle.net/jfriend00/kD73F/

si sólo quería contar hijos directos (niveles no profundas) y sólo quería contar con nodos de elemento (no un texto o comentario nodos) y quería el apoyo del navegador de ancho, usted puede hacer esto:

function countChildElements(parent) { 
    var children = parent.childNodes, cnt = 0; 
    for (var i = 0, len = children.length; i < len; i++) { 
     if (children[i].nodeType === 1) { 
      ++cnt; 
     } 
    } 
    return(cnt); 
} 
Cuestiones relacionadas