Javascript 在for-in循环中使用queryselectoral

Javascript 在for-in循环中使用queryselectoral,javascript,dom,Javascript,Dom,我觉得问这个问题有点愚蠢,因为它应该很简单,但我感到非常沮丧 我有几个div,我想一次只显示一个,所以我想隐藏其余的。我的做法: var elements = document.querySelectorAll("div"); for (i in elements) { elements[i].style.setProperty("display", "none"); } Firefox总是说elements[i].style.setProperty()未定义。 我已经在中使用了普通

我觉得问这个问题有点愚蠢,因为它应该很简单,但我感到非常沮丧

我有几个div,我想一次只显示一个,所以我想隐藏其余的。我的做法:

var elements = document.querySelectorAll("div");

for (i in elements) {
    elements[i].style.setProperty("display", "none");
}
Firefox总是说
elements[i].style.setProperty()未定义。
我已经在
中使用了普通for循环而没有使用
,但是我仍然想知道为什么这不起作用

提前谢谢

更换

elements[i].style.setProperty("display", "none");

作为
HTMLElement.style
属性返回一个
CSSStyleDeclaration
对象,该对象将元素的内联样式表示为属性,即
style.property='value'

并在遍历具有长度的类似数组的对象(如节点列表)时使用常规for循环

var elements = document.querySelectorAll("div");

for ( var i=0; i<elements.length; i++) {
    elements[i].style.display = "none";
}
var elements=document.querySelectorAll(“div”);
对于(var i=0;i

elements[i].style.setProperty("display", "none");

作为
HTMLElement.style
属性返回一个
CSSStyleDeclaration
对象,该对象将元素的内联样式表示为属性,即
style.property='value'

并在遍历具有长度的类似数组的对象(如节点列表)时使用常规for循环

var elements = document.querySelectorAll("div");

for ( var i=0; i<elements.length; i++) {
    elements[i].style.display = "none";
}
var elements=document.querySelectorAll(“div”);

对于(var i=0;iHuh。事实上,这就是我所做的变通方法。我认为使用方法设置
样式比通过直接属性修改来设置样式更合适。确切地说,为什么我必须使用常规for循环?我知道它可以工作,但我的版本为什么不能…首先,在
循环中使用
for对所有可枚举属性进行排序,这在某些罕见的情况下可能会导致问题。此外,在
for…in
循环中没有保证顺序,并且通常您希望按顺序迭代元素,特别是在修改这些元素时,因此最好对节点列表使用常规的
for
循环,这就是为什么它们具有e一个长度,为“数组状”.Huh.事实上,这就是我所做的工作。我认为使用方法来设置
样式比通过直接属性修改来设置样式更合适。确切地说,为什么我必须使用常规for循环?我知道它可以工作,但不是为什么我的版本不能…首先,使用
for..in
循环迭代所有可枚举属性,这在某些罕见的情况下可能会导致问题。此外,
for…in
循环中没有保证顺序,而且通常您希望按顺序迭代元素,特别是在修改这些元素时,因此最好为节点列表使用常规的
for
循环,这就是它们有长度的原因,“阵列式”。