【发布时间】:2022-01-06 22:03:10
【问题描述】:
我试图通过让 for 循环索引充当配对机制,将 for 循环中引用 SVG 图标的对象数组连接到匹配内容数组。两个数组的日志都标识了所有相关对象,但是当我调用 panel[i] 更改时,我得到那个 panel[i] 是未定义的? acc[i] 似乎在 for 循环中工作得很好。如何确保 acc[i] 事件侦听器与其对应的索引位置面板配对,然后控制面板上的 css 将显示从隐藏更改为阻止?
谢谢!
const acc = document.querySelectorAll(".fas.fa-plus-circle.fa-3x");
const panel = document.querySelectorAll(".panel");
let i;
console.log(acc);
console.log(panel);
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
console.log(panel[i]);
if (panel[i].style.display === "block") {
panel[i].style.display = "none";
} else {
panel[i].style.display = "block";
}
});
}
【问题讨论】:
-
在
for子句中移动let:你想要一个具有块范围的i变量。 -
我更喜欢在 2 个连接元素之间建立实际关系。就像
<div class='panel' data-num='1' >通过数据集与<i class='fas fa-plus-circle' data-num='1'>相关。或者更好的是图标和面板在同一个父容器内,你可以相对引用它们,比如icon.closest('.container').querySelector('.panel')...
标签: javascript arrays for-loop accordion