Hint
One listener on parent; use event.target to identify the child
Attach ONE listener to a parent instead of many listeners on children. Works because events bubble up the DOM.
// ā Inefficient
document.querySelectorAll('li').forEach(li =>
li.addEventListener('click', handleClick)
);
// ā
Event delegation
document.querySelector('ul').addEventListener('click', (e) => {
if (e.target.matches('li')) handleClick(e.target);
});
Benefits: fewer listeners = less memory, works for dynamically added elements, cleaner teardown.