增量变量在我的函数中不起作用

时间:2018-02-15 07:51:04

标签: javascript

所以我使用自定义CMS,我需要修改菜单。我需要在菜单中的每个项目之后添加onclick元素,这将解压子元素ul元素以显示子类别。无论如何......这是我的代码。

var catEl = document.getElementsByClassName("standard first");
var parEl = document.getElementsByClassName("child first");
var catNumb = catEl.length;
var parNumb = parEl.length;
var catOrd = 0;
var parOrd = 0;

while (catOrd < catNumb) {
  var newNode = document.createElement('a');
  newNode.classList.add("opener");
  newNode.innerHTML="x";
  newNode.onclick = function() {
    if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }
  };

  catEl[catOrd].after(newNode);
  catOrd++;
  parOrd++;
}

有一个问题,我不知道如何解决它,或者它有什么问题。

部分
if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }

在某些方面不正确。 Chrome中的开发工具说&#34; Uncaught TypeError:无法读取属性&#39; classList&#39;在HTMLAnchorElement.newNode.onclick&#34;中未定义 如果我用[数字]代替[parOrd],那么它就可以了。

我是JS的初学者,我做错了什么?

谢谢!

更新代码:

<script>

var parEl = document.getElementsByClassName("child first");
var parNumb = parEl.length;
var parOrd = 0;

while (parOrd < parNumb) {
  var newNode = document.createElement('a');
  newNode.classList.add("opener");
  newNode.innerHTML="x";
  newNode.onclick = function() {
    // returns 4 - number of elements of parEl (0 1 2 3 + 1 more for parOrd++ because it increments once more before making while statement invalid)
    document.getElementById("log").innerHTML = parOrd;
    if (!parEl[parOrd].classList.contains("open")) {
      parEl[parOrd].classList.add("open");
    }
    else {
      parEl[parOrd].classList.remove("open");
    }
  };
  parEl[parOrd].after(newNode);
  parOrd++;
}

</script>

1 个答案:

答案 0 :(得分:0)

在lopp中不执行parOrd的检查,看看它是否在有效范围内。我会记录它,看看为什么会发生这种情况。如果对该号码有限制,请务必事先检查它们。