在JavaScript中循环;getElementsByTagName();对象

在JavaScript中循环;getElementsByTagName();对象,javascript,html,object,Javascript,Html,Object,如何在选择器上正确循环从“getElementsByTagName()”返回的对象。我似乎做得不对 例如,如果我有一堆像这样的div: <div class="wrapper"> <div class="test1">this is a div</div> <div class="test2">this is a div</div> <div class="test1">this is a div</div> &

如何在选择器上正确循环从“getElementsByTagName()”返回的对象。我似乎做得不对

例如,如果我有一堆像这样的div:

<div class="wrapper">
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
</div>
var wrapper = document.querySelector(".wrapper");

var divs = wrapper.getElementsByTagName("div");

for (i = 0; i < divs.length; ++i) {
   each = divs[i];
   if (each.classList.contains("test2")) {
    this.style.display = "none";
   }
}

这是一个div
这是一个div
这是一个div
这是一个div
这是一个div
这是一个div
我想循环使用“getElementsByTagName()”的结果,如下所示:

<div class="wrapper">
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
<div class="test1">this is a div</div>
<div class="test2">this is a div</div>
</div>
var wrapper = document.querySelector(".wrapper");

var divs = wrapper.getElementsByTagName("div");

for (i = 0; i < divs.length; ++i) {
   each = divs[i];
   if (each.classList.contains("test2")) {
    this.style.display = "none";
   }
}
var wrapper=document.querySelector(“.wrapper”);
var divs=wrapper.getElementsByTagName(“div”);
对于(i=0;i

还有一个问题:

您在控制台中有一个错误:
uncaughttypeerror:无法设置未定义的属性“display”

尝试:

var wrapper=document.querySelector(“.wrapper”);
var divs=wrapper.getElementsByTagName(“div”);
对于(i=0;i

each.style.display=“无”
将取代

引用全局对象,而不是循环中正在迭代的元素

这里是修正的小提琴:


更改
this.style.display=“无”
each.style.display=“none”
检查此解决方案:

这些是我做的主要改变

for (i in divs) {
    if (divs[i].className.indexOf("test2") > -1) {
        divs[i].style.display = "none";
    }
}
我删除了
I=0
,因此循环在数组索引本身上运行

我还使用了
className
而不是
classList
,以实现更好的跨平台兼容性

更少的代码解决方案:

var divs = document.querySelectorAll('.wrapper div');
[].forEach.call(divs, function (div) {
    if (div.classList.contains('test2')) div.style.display = 'none';
});

如果您放置一个
console.log(这个)
您将看到
是Window对象,它没有style属性。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@aj8uppal这怎么不能回答问题?我同意这有点稀疏,但这不是删除它的理由。