为什么此数组忽略操作顺序?

时间:2018-07-13 23:45:53

标签: javascript arrays

编辑:问题在于,使用特定类调用所有div是在创建HTMLCollection,而不是数组。

我正在制作一个文本项目菜单,根据选择的项目在文档上显示文本。选择一个项目时将触发以下功能。理想情况下,它应该:

  1. 将所有突出显示的菜单项放入数组中,并在以后关闭其突出显示的类。 (这意味着如果菜单项已经突出显示,则将其关闭;如果另一个菜单项突出显示,则将其关闭,以便可以打开新菜单项。)
  2. 如果所选菜单项未突出显示,则将其切换为突出显示并显示信息。如果它已经被突出显示,它将隐藏信息并像数组中的其他项一样被关闭。
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]);
}

0 个答案:

没有答案