// Created on savesnippets.com ยท https://savesnippets.com/pv0P0eSQSJLxkV function delegate(parent, eventType, selector, handler) { parent.addEventListener(eventType, (event) => { const target = event.target.closest(selector); if (target && parent.contains(target)) { handler.call(target, event); } }); } // Usage const list = document.querySelector('#item-list'); delegate(list, 'click', '.delete-btn', function (e) { e.preventDefault(); this.closest('li').remove(); }); delegate(list, 'click', 'a.item-link', function (e) { console.log('Item clicked:', this.dataset.id); });