[英]How to loop through children of querySelectorAll matches
I want to update all child nodes of elements that match a certain attribute using querySelectorAll, but when I loop through the children of the current match, it breaks the loop. 我想使用querySelectorAll更新与某个属性匹配的元素的所有子节点,但是当我遍历当前匹配的子节点时,它会中断循环。
For example when I do the following: 例如,当我执行以下操作时:
var allElements = document.querySelectorAll("[class]"); for (var i = 0; i < allElements.length; i++) { var element = allElements[i]; element.style.color = "red"; }
<div class="test1"> <div>Child 1</div> <div>Child 2</div> </div> <div class="test2"> <div>Child 3</div> <div>Child 4</div> </div> <div class="test3"> <div>Child 3</div> <div>Child 4</div> </div>
I get all each matching element 我得到了所有匹配的元素
But when I then loop through the children of each match I only get the first match. 但是当我然后循环每场比赛的孩子时,我只得到第一场比赛。
var allElements = document.querySelectorAll("[class]"); for (var i = 0; i < allElements.length; i++) { var element = allElements[i]; for (i = 0; i < element.children.length; i++) { var child = element.children[i]; console.log(child) } element.style.color = "red"; }
<div class="test1"> <div>Child 1</div> <div>Child 2</div> </div> <div class="test2"> <div>Child 3</div> <div>Child 4</div> </div> <div class="test2"> <div>Child 3</div> <div>Child 4</div> </div>
Can someone help me understand why this happens and how I get around it? 有人能帮助我理解为什么会发生这种情况以及我如何解决这个问题? Thank you.
谢谢。
You are using same variable in both loop. 您在两个循环中使用相同的变量。 Use different
使用不同
for (j = 0; j < element.children.length; j++) {
var child = element.children[j];
console.log(child)
}
because you have used i
variable in both loop so loop key length 2
reset due to children DOM element have 2 length, you should another variable like j
in inner loop then work fine 因为你在两个循环中都使用了
i
变量所以循环键长度2
重置由于子DOM元素有2个长度,你应该在内循环中像j
这样的另一个变量然后工作正常
var allElements = document.querySelectorAll("[class]"); for (var i = 0; i < allElements.length; i++) { var element = allElements[i]; for (var j = 0; j < element.children.length; j++) { var child = element.children[i]; console.log(child) } element.style.color = "red"; }
<div class="test1"> <div>Child 1</div> <div>Child 2</div> </div> <div class="test2"> <div>Child 3</div> <div>Child 4</div> </div> <div class="test2"> <div>Child 3</div> <div>Child 4</div> </div>
var allElements = document.querySelectorAll("[class]");
for (i = 0; i < allElements.length; i++) {
var element = allElements[i];
for (i = 0; i < element.children.length; i++) {
var child = element.children[i];
console.log(child)
}
element.style.color = "red";
}
You reassigned value of i
inside the inner for loop. 你在内部for循环中重新分配了
i
值。
var allElements = document.querySelectorAll("[class]");
for (var i = 0, j=0; i < allElements.length; i++) {
var element = allElements[i];
for (; j < element.children.length; j++) {
var child = element.children[j];
console.log(child)
}
element.style.color = "red";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.