[英]Incremental variable doesn't work in my function
So i work with custom CMS and I need to modify a menu. 因此,我使用自定义CMS,并且需要修改菜单。 I need to add element with onclick after every item in menu which would unpack child ul element to show subcategories.
我需要在菜单中的每个项目之后添加带有onclick的元素,这将解压缩子ul元素以显示子类别。 Anyway... this is my code.
无论如何...这是我的代码。
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++;
}
There is one problem and I don't know how to solve it, or what is wrong with it. 有一个问题,我不知道如何解决,或有什么问题。 The part with
与部分
if (!parEl[parOrd].classList.contains("open")) {
parEl[parOrd].classList.add("open");
}
else {
parEl[parOrd].classList.remove("open");
}
is incorrect in some way. 在某种程度上是不正确的。 Dev tools in Chrome say "Uncaught TypeError: Cannot read property 'classList' of undefined at HTMLAnchorElement.newNode.onclick" If I substitute [parOrd] with a number, then it works.
Chrome中的开发工具说“未捕获的TypeError:无法读取HTMLAnchorElement.newNode.onclick上未定义的属性'classList'”如果将[parOrd]替换为数字,则可以使用。
I'm beginner in JS, what am I doing wrong? 我是JS的初学者,我在做什么错?
Thanks! 谢谢!
UPDATED CODE: 更新的代码:
<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>
You perform no checks of parOrd
in the while lopp, to see IF its in a valid range. 您在while lopp中不执行
parOrd
检查,以查看其是否在有效范围内。 I would log it to see why that happens. 我将其记录下来以查看发生这种情况的原因。 And if there are constraints on that number, make sure to check them beforehand.
并且如果该数字有限制,请确保事先检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.