Cada nodo tiene un solo nodo padre, pero puede tener muchos hijos.
El DOM provee a cada nodo de un vector que almacena la referencia a cada nodo hijo, la propiedad se llama:
childNodes
Este vector almacena una referencia a cada nodo hijo.
Los nodos pueden ser de tipo: ELEMENT_NODE (nodo elemento) o TEXT_NODE (nodo texto).
Confeccionar una página que contenga un div con tres párrafos. Luego acceder a la propiedad childNodes y verificar cuantos hijos tiene y de que tipo de nodos se tratan.
El archivo html es:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Prueba</title> </head> <body> <div id="bloque"> <p>Este es el primer párrafo</p> <p>Este es el segundo párrafo</p> <p>Este es el tercer párrafo</p> </div> <input type="button" value="Cantidad de Hijos del DIV" onClick="cantidadHijos()"> <script src="funciones.js"></script> </body> </html>
El archivo javascript funciones.js es el siguiente:
function cantidadHijos() { let lista = document.getElementById('bloque') alert('La cantidad de hijos del nodo div es:' + lista.childNodes.length) let cadena = "" for (let x = 0; x < lista.childNodes.length; x++) { if (lista.childNodes[x].nodeType == Node.TEXT_NODE) cadena = cadena + "Nodo tipo Texto\n" if (lista.childNodes[x].nodeType == Node.ELEMENT_NODE) cadena = cadena + "Nodo tipo Elemento\n" } alert(cadena) }
Es importante notar que sólo definimos la propiedad id para el elemento div, ya que teniendo la referencia de esta podemos acceder a sus hijos.
Entre la marca <div id="bloque"> y la marca <p> hay un salto de línea (el navegador crea un nodo de texto, este es el primer nodo).
Luego el primer párrafo es el segundo nodo.
Entre el primer párrafo y el segundo hay otro salto de línea (este es el tercer nodo) y así sucesivamente. Si contamos los párrafos y saltos de línea podremos contabilizar los 7 hijos.
Si no dejamos el salto de línea entre una párrafo y otro y tampoco dejamos salto de línea después del div y antes del cerrado del div, los hijos serán 3.
Para obtener la referencia a la marca div hacemos como lo vimos en el concepto anterior:
let lista = document.getElementById('bloque')
Imprimimos la cantidad de nodos hijo del div accediendo a la propiedad length de childNodes:
alert('La cantidad de hijos del nodo div es:' + lista.childNodes.length)
Como ya sabemos la cantidad de nodos que tiene podemos mediante un for recorrer el vector y analizar el tipo de cada nodo:
let cadena = "" for (let x = 0; x < lista.childNodes.length; x++) { if (lista.childNodes[x].nodeType == Node.TEXT_NODE) cadena = cadena + "Nodo tipo Texto\n" if (lista.childNodes[x].nodeType == Node.ELEMENT_NODE) cadena = cadena + "Nodo tipo Elemento\n" } alert(cadena)
En cambio la propiedad children retorna solo los nodos de tipo elemento. Volvamos a codificar el problema anterior para mostrar la cantidad de nodos de tipo elemento:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Prueba</title> </head> <body> <div id="bloque"> <p>Este es el primer párrafo</p> <p>Este es el segundo párrafo</p> <p>Este es el tercer párrafo</p> </div> <input type="button" value="Cantidad de Hijos tipo elemento del DIV" onClick="cantidadHijosElemento()"> <script src="funciones.js"></script> </body> </html>
El archivo JavaScript:
function cantidadHijosElemento() { let lista = document.getElementById('bloque') alert('La cantidad de hijos de tipo elemento del div es:' + lista.children.length) }