Das Anhängen eines einzelnen Ereignis-Listeners an ein übergeordnetes Element, anstatt jedem untergeordneten Element separate Listener hinzuzufügen, ist die Technik, die als Ereignisdelegation bekannt ist. Dies funktioniert aufgrund des Ereignis-Bubblings, bei dem ein Ereignis (wie ein Klick) im DOM-Baum vom untergeordneten zum übergeordneten Element nach oben wandert. Durch die Verarbeitung von Ereignissen auf übergeordneter Ebene können Sie Speicherplatz sparen und die Leistung verbessern, insbesondere wenn Sie mit vielen untergeordneten Elementen oder Elementen arbeiten, die dynamisch hinzugefügt werden.
Wenn ein Ereignis auf einem untergeordneten Element ausgelöst wird (z. B. ein Klick), hört es hier nicht auf. Das Ereignis sprudelt zu seinem übergeordneten Element usw. im DOM-Baum nach oben, bis es das Dokumentstammverzeichnis erreicht. Die Ereignisdelegierung macht sich dies zunutze, indem sie den Ereignis-Listener auf einem gemeinsamen Vorfahren aller untergeordneten Zielelemente platziert. Dieser Vorfahr wartet auf Ereignisse, die aus den untergeordneten Elementen hervorgehen, und verarbeitet sie basierend auf bestimmten Bedingungen, z. B. der Art des Ereignisses oder dem spezifischen untergeordneten Element, das das Ereignis ausgelöst hat.
Angenommen, wir haben eine Liste mit Schaltflächen und möchten für jede Schaltfläche ein Klickereignis verarbeiten. Anstatt jeder Schaltfläche einen Klickereignis-Listener hinzuzufügen, können wir dem übergeordneten Element einen einzelnen Listener hinzufügen.
<ul id="buttonList"> <li><button data-action="delete">Delete</button></li> <li><button data-action="edit">Edit</button></li> <li><button data-action="view">View</button></li> </ul>
Anstatt jetzt jeder Schaltfläche einen Klick-Ereignis-Listener hinzuzufügen, hängen wir einen einzelnen Listener an die übergeordnete
document.getElementById("buttonList").addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); if (action === "delete") { console.log("Deleting item..."); } else if (action === "edit") { console.log("Editing item..."); } else if (action === "view") { console.log("Viewing item..."); } } });
Der Click-Event-Listener ist an den
Wenn die Liste der Schaltflächen dynamisch generiert würde (z. B. durch Hinzufügen neuer Schaltflächen über JavaScript), würde die Ereignisdelegierung immer noch einwandfrei funktionieren, ohne dass Ereignis-Listener erneut angehängt werden müssten.
const ul = document.getElementById("buttonList"); // Dynamically adding new buttons const newButton = document.createElement("li"); newButton.innerHTML = '<button data-action="share">Share</button>'; ul.appendChild(newButton); // The same event listener on the parent will handle the new button ul.addEventListener("click", function(event) { if (event.target.tagName === "BUTTON") { const action = event.target.getAttribute("data-action"); console.log(action + " button clicked."); } });
Ereignis-Bubbling: Die Ereignisdelegation funktioniert aufgrund des Ereignis-Bubblings, bei dem ein auf einem untergeordneten Element ausgelöstes Ereignis an seine Vorgänger weitergegeben wird.
Effizient für dynamische Inhalte: Da wir den Ereignis-Listener an das übergeordnete Element anhängen, funktioniert er für Elemente, die später dem DOM hinzugefügt werden.
Leistung: Reduziert den Aufwand für das Anhängen und Verwalten mehrerer Ereignis-Listener, insbesondere bei einer großen Anzahl untergeordneter Elemente.
Die Ereignisdelegation ist eine wesentliche Technik für die effiziente DOM-Ereignisbehandlung, insbesondere wenn es um viele Elemente oder dynamische Inhalte geht.
Das obige ist der detaillierte Inhalt vonLernen Sie die Event-Delegation in JavaScript wie Sie sind 5. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!