编辑:问题是调用具有特定类的所有 div 正在创建一个 HTMLCollection,而不是一个数组。
我正在制作一个文本项目菜单,根据选择的项目在文档上显示文本。选择项目时会触发以下函数。理想情况下,它应该:
- 将所有突出显示的菜单项放入一个数组中,稍后关闭它们突出显示的类。(这意味着如果菜单项已经突出显示,它将被关闭,如果另一个菜单项被突出显示,它将被关闭,以便可以打开新菜单项)。
- 如果所选菜单项未突出显示,它将切换为突出显示并显示信息。如果它已经突出显示,它将隐藏信息并像数组中的其他项目一样关闭。
function togglePlaceholder(id){
let div = document.getElementById(id);
let otherDivs = document.getElementsByClassName('highlighted');
if($(div).hasClass('highlighted')){
hideNewCode();
} else {
div.classList.toggle('highlighted');
showNewCode(id);
}
for (let i = 0; i < otherDivs.length; i++) {
otherDivs[i].classList.toggle('highlighted');
}
}
然而,令人费解的是,所选择的未突出显示的项目进入 else 语句,切换到突出显示,显示信息,然后立即与数组中的其他项目一起关闭,即使项目数组未突出显示 div 时已调用!otherDivs六线电话后怎么还打着电话呢?数组应该已经被声明并准备好了。它不应该仍然在寻找其他具有“突出显示”类的 div。
如何绕过这个错误?
解决方案:
let blueDivs = document.getElementsByClassName('blueSub');
let otherDivs = [];
for (let i = 0; i < blueDivs.length; i++){
otherDivs.push(blueDivs[i]);
}