我很难理解如何遍历DOM元素数组。我有一系列
div
包含
img
元素。我从节点列表开始,但将其转换为数组。我希望能够按特定的按钮
部门
具有特定类的s消失。事件监听器是功能性的,因为单击按钮时,具有指定类的第一个元素将消失,而不是
部门
具有相同的类名。
相关HTML
<!-- list items for the project gallery -->
<ul class="gallery-list">
<li class="gallery-list-item all-button">All</li>
<li class="gallery-list-item indoor-button">Indoor</li>
<li class="gallery-list-item outdoor-button">Outdoor</li>
</ul>
<!-- flex container for gallery pictures -->
<div class="gallery-flex-container">
<!-- flex items / content images -->
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-1.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-1.jpg" alt="outdoor garden picture">
</div>
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-2.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-2.jpg" alt="outdoor garden picture">
</div>
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-3.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-3.jpg" alt="outdoor garden picture">
</div>
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-4.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-4.jpg" alt="outdoor garden picture">
</div>
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-5.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-5.jpg" alt="outdoor garden picture">
</div>
<div class="gallery-flex-item show-all indoor">
<img src="images/indoor-6.jpg" alt="indoor garden picture">
</div>
<div class="gallery-flex-item show-all outdoor">
<img src="images/outdoor-6.jpg" alt="outdoor garden picture">
</div>
</div>
相关CSS
.hide-indoor {
display: none;
}
.hide-outdoor {
display: none;
}
相关Javascript
// Script for gallery page picture toggle
let imgArray = [...document.querySelectorAll('.gallery-flex-item')];
console.log(imgArray);
var listItem = document.querySelector('.gallery-list');
var indoor = document.querySelector('.indoor');
var outdoor = document.querySelector('.outdoor');
listItem.addEventListener('click', function (e) {
for (var i = 0; i < imgArray.length; i++) {
if (e.target.classList.contains('all-button')) {
indoor.classList.remove('hide-indoor');
outdoor.classList.remove('hide-outdoor');
} else if (e.target.classList.contains('indoor-button')) {
// Here is the section of code I tried incorporating the 'i' variable
// and it works the exact same as the other two 'if' statements.
// Only manipulating the first of elements with selected classes.
if (imgArray[i].classList.contains('indoor')) {
indoor.classList.remove('hide-indoor');
} else if (imgArray[i].classList.contains('outdoor')) {
outdoor.classList.add('hide-outdoor');
}
} else if (e.target.classList.contains('outdoor-button')) {
outdoor.classList.remove('hide-outdoor');
indoor.classList.add('hide-indoor');
}
}
});
这是我第一次尝试迭代DOM元素,所以我真的不知道我哪里出错了。