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)
}