所以我使用自定义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>
答案 0 :(得分:0)
在lopp中不执行parOrd
的检查,看看它是否在有效范围内。我会记录它,看看为什么会发生这种情况。如果对该号码有限制,请务必事先检查它们。