for循环内的for循环似乎无法弄清楚

时间:2020-04-28 13:45:27

标签: javascript

我在for循环中有一个相当简单的for循环,但是我无法使其按预期工作。 所示代码应该是过滤器。 eTags为我提供了要过滤的p元素。 我有几个按钮/过滤词,如果单击它们,“激活”会得到那些。 现在在第二个if条件中,我看p元素是否包含“筛选器按钮”的textContent。 它适用于一个过滤器,但如果激活> 2,则无效。 在第二次for循环迭代中,它隐藏了在第一次迭代中可见的一个元素。 我知道我很蠢,但是任何帮助将不胜感激!

let eTags = document.querySelectorAll(".placeDescription33");
let activated = document.getElementsByClassName('activexyz');

for (let n = 0; n < eTags.length; n++) {
  let vater2 = eTags[n].parentNode;
  let grossvater2 = vater2.parentNode;

  if (activated.length === 0) {
    eTags[n].style.visibility = "visible";
    grossvater2.style.display = "inline"
  }

  for (let i = 0; i < activated.length; i++) {

    let textCont = activated[i].textContent.trim();

    if (eTags[n].textContent.contains(textCont)) {
      eTags[n].style.visibility = "visible";
      grossvater2.style.display = "inline"
    } else if (!(eTags[n].textContent.contains(textCont))) {
      eTags[n].style.visibility = 'hidden';
      grossvater2.style.display = 'none';
    }

  }
}

1 个答案:

答案 0 :(得分:1)

问题出在您的第二个循环中,您正在激活正确的对象,而停用错误的对象。因此,如果您在另一个迭代中打开一个,它将被关闭...我只是在手之前将所有功能都关闭了。

for (let n = 0; n < eTags.length; n++) {
  let vater2 = eTags[n].parentNode;
  let grossvater2 = vater2.parentNode;

  if (activated.length === 0) {
    eTags[n].style.visibility = "visible";
    grossvater2.style.display = "inline"
  }else{
    eTags[n].style.visibility = 'hidden';
    grossvater2.style.display = 'none';
    for (let i = 0; i < activated.length; i++) {

      let textCont = activated[i].textContent.trim();

      if (eTags[n].textContent.contains(textCont)) {
        eTags[n].style.visibility = "visible";
        grossvater2.style.display = "inline"
      }

    }
  }
}