【发布时间】:2019-07-17 03:35:41
【问题描述】:
我关心的JS代码是这样的:
const modals=document.querySelectorAll('.modal');
const modalsArray=[...modals];
console.log(modalsArray);
document.addEventListener('click', function (e) {
e.stopPropagation();
e.preventDefault();
if (e.target.classList.contains("item")) {
itemIndex=e.target.classList.item(1);
const modals=document.querySelectorAll('.modal');
const modalsArray=[...modals];
console.log(itemIndex);
console.log(modalsArray);
modalsArray.filter(function (modal) {
if (modal.classList.item(1)===itemIndex) {
modal.classList.add('on');
modalContainer.classList.remove('off');
modalContainer.classList.add('on');
}
})
}
});
const arrow=document.querySelectorAll('.arrow');
const arrowArray=[...arrow];
console.log(arrowArray);
每当我从我的 JS 文件控制台记录 modalsArray 或 arrowArray 时,数组就会显示为空。但是我发现,如果我在控制台中从头开始编写代码来制作数组,那么数组中的所有项目都会正确显示。
那么为什么会这样呢?为什么我的控制台上当前显示一个空数组?它与范围或其他什么有关吗?
当我将 modalsArray 放入事件侦听器中并单击相应的目标时,数组将正确显示,并且该事件侦听器中的其余代码正常工作。
我注意到与 arrowArray 相同的事情,并意识到这两个元素存在相同的问题。我想我应该问一下,因为肯定有什么事情发生了。
那么,为什么图片中的这两个元素都出现了一个空数组呢?
查看我的小提琴以获取更多信息: https://jsfiddle.net/apasric4/kvs25wbL/3/
【问题讨论】:
-
generateHTML是异步的。在尝试选择它创建的元素之前,您无需等待它完成。 -
好的,我应该如何重新排列代码,以便在 generateHTML 完成后选择元素?
-
@AmandeepPasricha:使用承诺链,jsfiddle.net/v83zqofp/1
-
@MuraliNepalli 谢谢我给你回复了一个问题。
标签: javascript arrays console nodelist