Lista de nodos de JavaScript

Migel Hewage Nimesha 15 febrero 2024
  1. Introducción a los nodos HTML DOM
  2. Objeto JavaScript NodeList
  3. Objetos NodeList estáticos vs vivos
  4. Operaciones sobre el objeto NodeList
Lista de nodos de JavaScript

HTML DOM significa Document Object Model, que es una interfaz para documentos HTML. Trata cada página web o documento como una estructura de árbol que consta de una colección de nodos.

En palabras simples, un nodo es un objeto del documento web. Estos nodos se colocan en un documento DOM jerárquicamente.

Además, pueden tener nodos primarios y secundarios.

Introducción a los nodos HTML DOM

Supongamos que tenemos una página HTML, como se muestra a continuación.

<!DOCTYPE html>
<html>
  <head>
    <!-- This is the page head -->
    <title>DOM Node Example</title>
  </head>
  <body>
    <!-- This is the page body -->
    <h2>DOM Node Demo</h2>
    <p id="body-content">This article is about DOM NodeList.</p>
  </body>
</html>

El navegador interpreta la página HTML anterior como una estructura de árbol. Por lo tanto, podría parecerse a lo siguiente.

|-doctype: html
|-HTML
	-|HEAD
		-|TITLE
			-|text: DOM Node Example
	-|BODY
		-|comment: This is the page body
		-|H2
			-|text: DOM Node Demo
		-|P id="body-content"
			-|text: This article is about DOM NodeList.

Cada etiqueta HTML es un nodo DOM, pero los nodos no se limitan a las etiquetas HTML. Incluso los textos y comentarios HTML se consideran nodos DOM.

Por lo tanto, los nodos y elementos HTML son dos cosas diferentes donde los elementos HTML son un subtipo de nodos DOM.

Objeto JavaScript NodeList

Como sugiere el nombre, un objeto NodeList es una colección de nodos DOM. Es muy similar al objeto HTMLCollection con pequeñas diferencias; como el objeto HTMLCollection se puede acceder con el nombre y la ID, pero los objetos NodeList solo admiten el acceso basado en índice.

Además, la HTMLCollection contiene solo los nodos de tipo Node.ELEMENT_NODE. Los objetos NodeList pueden contener diferentes tipos de nodos, como nodos de atributos, nodos de texto y nodos de comentarios, incluidos los nodos de elementos.

Hay dos tipos de objetos NodeList, en vivo y estáticos, que se discutirán en la siguiente sección.

Objetos NodeList estáticos vs vivos

La propiedad childNodes en el objeto document devuelve un objeto NodeList que llamamos como una NodeList en vivo. Porque este objeto se ve afectado por las modificaciones del DOM automáticamente.

Usemos la consola del navegador para acceder al documento HTML mencionado anteriormente usando JavaScript, como se muestra a continuación.

const bodyContent = document.getElementById('body-content');
var nodeListForBody = bodyContent.childNodes;
console.log(nodeListForBody);

Producción:

objeto de lista de nodos

Como era de esperar, el objeto NodeList ha sido devuelto por la propiedad childNodes. Comprobemos la longitud del objeto nodeListForBody.

console.log(nodeListForBody.length);

Producción:

longitud de la lista de nodos

Agreguemos un nuevo elemento secundario al elemento de párrafo, como se muestra a continuación.

bodyContent.appendChild(document.createElement('div'));

Luego, verificaremos la longitud de la NodeList nodeListForBody como se muestra a continuación.

console.log(nodeListForBody.length);

Producción:

lista de nodos en vivo

Dado que la modificación del DOM ha cambiado la longitud de nodeListForBody, es un objeto NodeList vivo.

A diferencia de los objetos NodeList en vivo, los NodeList estáticos no se ven afectados por las modificaciones del DOM. Normalmente, el método document.querySelectorAll() devuelve un objeto NodeList estático.

Operaciones sobre el objeto NodeList

Una NodeList no es una matriz. Podemos hacer un bucle de una NodeList por su índice, que es similar a una matriz de JavaScript, pero no admite ninguna de las operaciones de matriz como pop(), push() y join().

Accedemos al primer nodo de la anterior NodeList: nodeListForBody por su índice 0.

console.log(nodeListForBody[0]);

Producción:

acceso a la lista de nodos por índice

Una Lista de nodos puede convertirse fácilmente en una matriz típica de JavaScript utilizando el método Array.from().

const nodeListAsArray = Array.from(nodeListForBody)
console.log(nodeListAsArray);

Producción:

lista de nodos a matriz

Como era de esperar, la anterior NodeList nodeListForBody se ha convertido en una matriz nodeListAsArray.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.