const images = document.querySelectorAll(".img_items");
images.forEach((image) => {
image.addEventListener("click", () => {
image.classList.add("select");
});
});
.img_items::after{
content: ' ' attr(class)
}
<div class="img_container">
<div class="img_items ">1</div>
<div class="img_items ">2</div>
<div class="img_items">3</div>
<div class="img_items">4</div>
</div>
I tried adding the class to the variable (images) itself on item click event but it didn’t add the class to the sibling items.
images.classList.add("select")
How do we achieve this?
2
Answers
Add the class to each element in a loop, just like adding the event listener.
If you only want to do it for the siblings in the same
.img_container
, you can use DOM navigation to first select them and loop over them, rather than looping over allimages
.First of all, to explain why you aren’t getting the expected behavior:
What your code is doing is looping over all elements that have the
img_items
class and attaching aclick
eventListener
to each one.That event listener takes the selected image and adds the class
select
to that image only.essentially, your code is equivalent to the following:
So you are only changing the
classlist
of the selected element.Thus, instead, you need to loop through the elements again inside the
eventListener
like so: