简体   繁体   English

如何循环查询querySelectorAll的子项匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM