¿Cuál es la diferencia entre HTMLCollection y NodeList, y cómo obtenerlas?
- 453Palabras
- 2Minutos
- 08 Sep, 2024
En el desarrollo web, HTMLCollection y NodeList son colecciones comunes de objetos DOM, utilizadas para almacenar múltiples elementos DOM. Aunque parecen similares, existen diferencias notables en su comportamiento y características. Comprender estas diferencias es crucial para una manipulación eficiente de los elementos DOM.
1. HTMLCollection
HTMLCollection es una colección que se actualiza en tiempo real. Cuando la estructura del DOM cambia, HTMLCollection refleja automáticamente estos cambios. Solo incluye nodos de elementos, por lo que no almacena nodos de texto o de comentarios.
Características
- Actualización en tiempo real: Cuando la estructura del DOM cambia,
HTMLCollectionse actualiza automáticamente. - Diversas formas de acceso: Se puede acceder a los elementos mediante índice, la propiedad
length, o a través del atributoidonamedel elemento. - Solo contiene nodos de elementos: Ignora nodos de texto y comentarios.
Formas de obtenerla
document.getElementsByTagName(tagName): Devuelve una colección de elementos por su nombre de etiqueta.document.getElementsByClassName(className): Devuelve una colección de elementos por su nombre de clase.document.forms,document.images,document.links: También devuelvenHTMLCollection.
1const divs = document.getElementsByTagName("div"); // Devuelve un HTMLCollection2. NodeList
NodeList es una colección que puede contener cualquier tipo de nodo (elementos, texto, comentarios, etc.). Puede ser estática (no se actualiza con cambios en el DOM) o dinámica, dependiendo de cómo se obtenga.
Características
- No se actualiza en tiempo real: Las
NodeListobtenidas conquerySelectorAllson estáticas y no se actualizan automáticamente. - Incluye todo tipo de nodos: Además de los elementos, puede almacenar nodos de texto, comentarios, entre otros.
- Soporta múltiples métodos de iteración: Es posible recorrer una
NodeListusandoforEach()(compatible en navegadores modernos).
Formas de obtenerla
document.querySelectorAll(selector): Devuelve unaNodeListestática.document.childNodes: Devuelve unaNodeListdinámica que incluye todos los nodos hijos (elementos, texto, comentarios, etc.).parentNode.childNodes: Devuelve unaNodeListcon todos los nodos hijos de un nodo específico.
1const divs = document.querySelectorAll("div"); // Devuelve un NodeList estáticaResumen de las diferencias clave
-
Diferencia de tipos:
HTMLCollectionsolo contiene nodos de elementos.NodeListpuede contener cualquier tipo de nodo (elementos, texto, comentarios, etc.).
-
Actualización en tiempo real:
HTMLCollectionse actualiza en tiempo real.NodeList, obtenida mediantequerySelectorAll(), es estática, mientras quechildNodeses dinámica.
-
Métodos de iteración:
- Se puede acceder a
HTMLCollectionmediante índices, pero no soportaforEach(). NodeListsoportaforEach(), lo que la hace más flexible para iterar.
- Se puede acceder a
Recomendaciones de uso
- Cuando necesites manipular una estructura DOM dinámica, es mejor utilizar
HTMLCollection, ya que se actualiza automáticamente con los cambios en el DOM. - Si solo necesitas una colección estática de elementos,
NodeListes una mejor opción, especialmente cuando se obtiene mediantequerySelectorAll().
Ejemplo de código
1// Obtener HTMLCollection2let htmlCollection = document.getElementsByClassName("example");3console.log(htmlCollection); // Colección que se actualiza en tiempo real4
5// Obtener NodeList6let nodeList = document.querySelectorAll(".example");7console.log(nodeList); // Colección estática8
9// Recorrer NodeList10nodeList.forEach((element) => {11 console.log(element);12});Al comprender las diferencias entre HTMLCollection y NodeList, los desarrolladores pueden manipular el DOM de manera más eficiente, mejorando el rendimiento y la mantenibilidad del código.