2012-08-02 17 views
16
<ul> 
    <li>Array1</li> 
    <li>Array2</li> 
    <li id="element">Array3</li> 
</ul> 
<script> 
    var temp = document.getElementById('element').parentNode; 
    child = temp.childNodes; 
    console.log(temp.length); 
</script> 

Necesito obtener la longitud del nodo hijo usando el elemento id. Mi código devuelve 7 como resultado, pero tengo solo 3 nodos.Javascript - número de hijos

+2

posible duplicado de [usar JavaScript para contar elementos secundarios inmediatos de un elemento] (http://stackoverflow.com/questions/5685184/use-javascript-to-count-immediate-child-elements-of- un elemento) - utilice la búsqueda antes de hacer una nueva pregunta. –

+0

Te acepto ... Pero necesito javascript puro no responda jquery –

+0

Si lees la respuesta detenidamente, verás que no usa jQuery en absoluto/ –

Respuesta

16

What lo que quiere es .children.length o .childElementCount (no recomendado) ya que childNodes obtiene todos childNodes, también Nodos de texto que son 4 en su caso (los saltos de línea).

var temp = document.getElementById('element').parentNode; 
child = temp.children; 
console.log(child.length); 
// or the following 
console.log(temp.childElementCount); 
+0

Recibo un error en FF getChildren no es una función –

+0

@KarthickV usa '.children' this devolverá una colección html y tendrá un mejor soporte. Ver [docu aquí] (https://developer.mozilla.org/es/DOM/Element.children) – Christoph

+0

@KarthickV una nota importante: los niños nos dan el uso correcto, pero tiene errores en IEs anteriores - cuenta los nodos de comentario ' '¡también! Así que ten cuidado de eso. – Christoph

6

childNodes devuelve los 3 elementos de la lista, su contenido de texto y el espacio en blanco entre ellos (aunque no en todos los navegadores). Tres alternativas:

  1. FF y Chrome: elem.childElementCount (volverá 3)

  2. IE (& & FF yo sepa): elem.childNodes.length (=== 3)

  3. Antiguo IE: elem.children.length

+0

funciona bien En FF –

+0

@KarthickV: Comprobé 'childNodes. length', no funciona en chrome (no sé lo que estaba pensando) editó mi respuesta ... también: ¿quién votó negativamente mi respuesta, y por qué? –

+0

funciona bien para mí (chrome: temp.childElementCount) ... no sé quién votó ... Daré una votación ... Gracias por su valiosa respuesta –

2

La propiedad childrenNodes incluye todos los tipos de nodos: TEXT_NODE, EL EMENT_NODE, COMMEN_NODE, etc ....

Debe contar el número de elementos, aquí es an example solution basado en DOM que debería funcionar en todos los sistemas:

var temp = document.getElementById('element').parentNode; 
var children = temp.childNodes; 
console.log(children.length); // 7 

function countElements(children) { 
    var count=0; 
    for (var i=0, m=children.length; i<m; i++) 
    if (children[i].nodeType===document.ELEMENT_NODE) 
     count++; 
    return count; 
} 
console.info(countElements (children));​ // 3 

EDITAR

Del mismo modo si desea una función para recuperar todos los elementos secundarios solo con DOM, aquí hay una función:

function childElements(node) { 
    var elems = new Array(); 
    var children = node.childNodes; 

    for (var i=0,i < children.length ; i++) { 
     if (children[i].nodeType===document.ELEMENT_NODE) { 
      elems.push(children[i]); 
      return elems; 
      } 
     } 
    } 

console.info(childElements(temp).length);​ //3