Entendiendo el DOM
¿Para qué aprender JavaScript?
¿Qué es DOM y Window Object?
Explorando Nodos del DOM
Seleccionando y Accesando a Elementos del DOM
Consultando el DOM con getElementById y querySelector
Navegación efectiva entre nodos
Manipulando Elementos del DOM
Modificando atributos y propiedades
Modificando texto en HTML
Modificando estilos en HTML
Modificando la visibilidad de elementos HTML
Creación de elementos con HTML Strings e insertAdjacentElement()
Agregando elementos con innerHTML e insertAdjacentHTML()
Creación de elementos con createElement()
Remover elementos con remove() y removeChild()
Clonación y reemplazo de elementos con cloneNode y replaceChild
Manipulando Eventos en el DOM
Entendiendo eventos y tipos: Burbuja, Captura y Propagación
Agregar y eliminar escuchadores de eventos o Event Listeners
El objeto evento o eventObject
Manejo de entradas de formulario y validación
Delegación de eventos y prevención de comportamiento predeterminado
Creando un Administrador de Tareas
Añadir tareas desde un formulario
Eliminar y editar tareas del DOM
Almacenamiento y carga de datos en localStorage
Eliminar y editar tareas del almacenamiento local
Inspeccionando y solucionando errores en el código
Personalizando la interfaz del administrador de tareas
Aún hay más por aprender
Asincronía en JavaScript
¿Cómo funciona el JavaScript Engine?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
El Delegation Pattern, o patrón de delegación, es una técnica utilizada en JavaScript para optimizar la gestión de eventos. Este patrón es especialmente útil cuando se trabaja con elementos dinámicos en el DOM (Document Object Model). En lugar de asignar un evento a cada elemento individual, se delega la escucha del evento a un elemento padre. Así, el elemento padre puede reconocer y gestionar los eventos de sus hijos.
A continuación, te explicamos cómo aplicar este patrón para cambiar el estilo de los elementos de una lista al hacer clic.
Vamos a explorar dos métodos para cambiar el color de fondo de elementos en una lista HTML cuando se les hace clic. El objetivo es aplicar una clase que modifique el estilo al elemento seleccionado.
Una forma simple pero menos eficiente es agregar un EventListener
a cada elemento de la lista. Aquí está cómo se hace en JavaScript:
const listItems = document.querySelectorAll("li");
listItems.forEach(item => {
item.addEventListener("click", event => {
const target = event.target;
target.classList.toggle("highlight");
});
});
En este código:
<li>
del documento y se almacenan en una variable listItems
.forEach
para agregar un evento click
a cada elemento.highlight
al hacer clic, lo que cambia el estilo del elemento.Aunque este método es directo, puede afectar el rendimiento si se tiene una lista con muchos elementos.
Para una mejor práctica, podemos utilizar el Delegation Pattern, asignándole el evento al elemento padre (<ul>
) y haciendo que este maneje la interacción con sus hijos:
const list = document.querySelector("ul");
list.addEventListener("click", event => {
const li = event.target.closest("li");
if (li) {
li.classList.toggle("highlight");
}
});
En este enfoque:
<ul>
) y se le asigna un EventListener
para el evento click
.event.target.closest("li")
para obtener el elemento <li>
más cercano dentro de la lista. Esto asegura que, independientemente de dónde se haga clic dentro de un ítem, será el elemento <li>
el que cambie de clase.Este método es más eficiente porque reduce el número de listeners activos en el documento, delegando la responsabilidad al elemento padre.
El Delegation Pattern mejora el rendimiento de la aplicación al:
En resumen, el empleo de esta técnica no solo optimiza el funcionamiento de tu aplicación, sino que también permite manejar elementos dinámicos de forma más efectiva. Convierte esta práctica en una parte fundamental de tu flujo de trabajo en JavaScript. ¡Sigue mejorando y explorando las ventajas de los patrones de diseño en el desarrollo web!
Aportes 18
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?