Junior
¿Qué es la delegación?
sobes.tech AI
Respuesta de la IA
El delegamiento de eventos es un patrón de diseño que permite a un único manejador de eventos gestionar los eventos de múltiples elementos hijos. En lugar de asignar un manejador a cada elemento, el manejador se asigna al elemento padre. Cuando ocurre un evento en un elemento hijo, este "burbujea" hasta el padre, donde el manejador puede interceptarlo y procesarlo.
Principio de funcionamiento:
- El evento se genera en el elemento objetivo (por ejemplo,
<button>). - El evento se propaga hacia arriba en el árbol DOM hasta los elementos padres.
- El manejador de eventos, adjunto al elemento padre, intercepta el evento.
- En el manejador, se puede determinar en qué elemento hijo ocurrió el evento usando
event.target.
Ventajas:
- Rendimiento: Menos manejadores de eventos, lo que reduce el consumo de memoria y CPU, especialmente en listas o tablas grandes.
- Facilidad de gestión: Es más fácil agregar y eliminar elementos del DOM, ya que no es necesario adjuntar/desadjuntar manejadores constantemente.
- Limpieza del código: Menos código repetitivo para adjuntar manejadores.
Ejemplo:
Supongamos que tenemos una lista de elementos y queremos reaccionar a los clics en cada uno.
Sin delegación, tendríamos que adjuntar un manejador a cada <li>:
// Obtenemos todos los elementos <li>
const listItems = document.querySelectorAll('li');
// Adjuntamos un manejador a cada elemento
listItems.forEach(item => {
item.addEventListener('click', function() {
console.log('Clic en:', this.textContent);
});
});
Con delegación, solo adjuntamos el manejador al <ul>:
// Obtenemos la lista padre
const list = document.querySelector('ul');
// Adjuntamos el manejador a la lista
list.addEventListener('click', function(event) {
// Verificamos si el clic fue en un elemento <li>
if (event.target.tagName === 'LI') {
console.log('Clic en:', event.target.textContent);
}
});
En este ejemplo, usamos event.target para determinar qué <li> fue clickeado.