通过 onclick 访问 Javascript 数组中的子元素(for 循环)
Accessing child elements in Javascript array via onclick (for loop)
我正在循环遍历这样的数组:
<% thoughts.docs.forEach(function(thought, i) { %>
<div class="square-box-container">
<div class="pyp-image-container">
<div class="image-overlay">
默认情况下,元素 class 名称 'image-overlay' 被隐藏并显示:'none'。我正在尝试创建一个带有 onclick 事件的函数,因此当用户单击 div 'square-box-container' 时,该元素的图像覆盖仅更改为显示:'block'.
目前我有以下代码,但我认为我的内部循环有误,因为当我点击一个方框容器时,所有方框容器的图像覆盖更改为显示:'block',如仅反对该容器覆盖。谁能告诉我做错了什么?
var containerItems = document.getElementsByClassName("square-box-container");
var overlayItems = document.getElementsByClassName("image-overlay");
for (var i = 0; i < containerItems.length; i ++) {
containerItems[i].onclick = function() {
for (var i = 0; i < overlayItems.length; i ++) {
overlayItems[i].style.display = 'block';
}
}
}
我不是很熟悉子节点的使用,这是这里所要求的吗?谢谢
如果您只想更改关联元素的显示,请不要在点击处理程序中循环 - 并使用 let
而不是 var
。
for (let i = 0; i < containerItems.length; i++) {
containerItems[i].onclick = function () {
overlayItems[i].style.display = 'block';
}
}
另一种选择是完全省略 overlayItems
集合,而是从单击的元素导航。
for (const container of document.getElementsByClassName("square-box-container")) {
container.addEventListener('click', (e) => {
e.currentTarget.querySelector('.image-overlay').style.display = 'block';
});
}
我正在循环遍历这样的数组:
<% thoughts.docs.forEach(function(thought, i) { %>
<div class="square-box-container">
<div class="pyp-image-container">
<div class="image-overlay">
默认情况下,元素 class 名称 'image-overlay' 被隐藏并显示:'none'。我正在尝试创建一个带有 onclick 事件的函数,因此当用户单击 div 'square-box-container' 时,该元素的图像覆盖仅更改为显示:'block'.
目前我有以下代码,但我认为我的内部循环有误,因为当我点击一个方框容器时,所有方框容器的图像覆盖更改为显示:'block',如仅反对该容器覆盖。谁能告诉我做错了什么?
var containerItems = document.getElementsByClassName("square-box-container");
var overlayItems = document.getElementsByClassName("image-overlay");
for (var i = 0; i < containerItems.length; i ++) {
containerItems[i].onclick = function() {
for (var i = 0; i < overlayItems.length; i ++) {
overlayItems[i].style.display = 'block';
}
}
}
我不是很熟悉子节点的使用,这是这里所要求的吗?谢谢
如果您只想更改关联元素的显示,请不要在点击处理程序中循环 - 并使用 let
而不是 var
。
for (let i = 0; i < containerItems.length; i++) {
containerItems[i].onclick = function () {
overlayItems[i].style.display = 'block';
}
}
另一种选择是完全省略 overlayItems
集合,而是从单击的元素导航。
for (const container of document.getElementsByClassName("square-box-container")) {
container.addEventListener('click', (e) => {
e.currentTarget.querySelector('.image-overlay').style.display = 'block';
});
}