Event Delegation & Manipulating Classes in JavaScript DOM
JavaScript provides powerful techniques for handling events efficiently using event delegation and managing CSS classes dynamically with the classList property.
1. Event Delegation
What It Does:
Allows handling multiple child elements' events using a single event listener on a parent element.
Uses
event.target
to identify which child element triggered the event.Improves performance by reducing the number of event listeners in the document.
Syntax:
document.getElementById("parent").addEventListener("click", function(event) {
if (event.target.matches(".child")) {
console.log("Child element clicked:", event.target.textContent);
}
});
Real-Life Examples:
Handling Click Events on a List of Items Dynamically
<ul id="itemList"> <li class="item">Item 1</li> <li class="item">Item 2</li> <li class="item">Item 3</li> </ul> <script> document.getElementById("itemList").addEventListener("click", function(event) { if (event.target.classList.contains("item")) { alert("Clicked on: " + event.target.textContent); } }); </script>
Managing a Button Group Dynamically
<div id="buttonContainer"> <button class="btn">Button 1</button> <button class="btn">Button 2</button> </div> <script> document.getElementById("buttonContainer").addEventListener("click", function(event) { if (event.target.classList.contains("btn")) { event.target.style.backgroundColor = "green"; } }); </script>
Handling Form Inputs Dynamically
<div id="formContainer"> <input type="text" class="input-field" placeholder="Type here"> </div> <script> document.getElementById("formContainer").addEventListener("input", function(event) { if (event.target.classList.contains("input-field")) { console.log("User typed: " + event.target.value); } }); </script>
2. Manipulating Classes (classList
)
What It Does:
Allows adding, removing, toggling, and checking for CSS classes dynamically.
Useful for styling elements without modifying inline styles directly.
Methods:
classList.add("className")
– Adds a class.classList.remove("className")
– Removes a class.classList.toggle("className")
– Toggles a class (adds if absent, removes if present).classList.contains("className")
– Checks if an element has a class.
Syntax:
document.getElementById("element").classList.add("newClass");
document.getElementById("element").classList.remove("oldClass");
document.getElementById("element").classList.toggle("toggleClass");
Real-Life Examples:
Adding a Class When Button Clicked
<button id="myButton">Click Me</button> <script> document.getElementById("myButton").addEventListener("click", function() { this.classList.add("clicked"); }); </script> <style> .clicked { background-color: red; color: white; } </style>
Removing a Class on Hover
<div id="hoverBox" class="highlight">Hover over me</div> <script> document.getElementById("hoverBox").addEventListener("mouseover", function() { this.classList.remove("highlight"); }); </script> <style> .highlight { background-color: yellow; } </style>
Toggling a Dark Mode Class
<button id="darkModeBtn">Toggle Dark Mode</button> <script> document.getElementById("darkModeBtn").addEventListener("click", function() { document.body.classList.toggle("dark-mode"); }); </script> <style> .dark-mode { background-color: black; color: white; } </style>
Conclusion
Event delegation improves efficiency by using a single event listener for multiple elements.
event.target
helps identify the clicked element inside a parent container.classList
methods allow dynamic class manipulation, making UI interactions smoother.
Mastering these techniques will help create dynamic, interactive, and efficient web applications! 🚀