2016-10-16 53 views
0

我覺得有點愚蠢,因爲它應該是如此簡單,但我變得非常沮喪。在for循環中使用querySelectorAll

我有幾個div我一次只顯示一個,所以我想隱藏其餘的。我的方法:

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

for (i in elements) { 
    elements[i].style.setProperty("display", "none"); 
} 

Firefox總是說elements[i].style.setProperty();未定義。 我已經使用正常的for循環,而不使用in,但我仍然想知道爲什麼這不起作用的解決方法。

在此先感謝!

回答

2

更換

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

elements[i].style.display = "none"; 

由於HTMLElement.style屬性返回CSSStyleDeclaration對象,表示元素的內嵌樣式爲屬性,即style.property = 'value'

,並使用常用的循環時,迭代具有長度的類似數組的對象,如nodeLists

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

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

呵呵。其實,這就是我做的解決方法。我認爲使用一種方法來設置'style'會比通過直接的屬性修改來設置更合適的代碼。 爲什麼我必須正確使用for-loop?我發現它可行,但不是爲什麼我的版本不會... –

+0

首先,使用'for..in'循環遍歷所有可枚舉的屬性,這在某些罕見情況下會導致問題。另外,在'for ... in'循環中沒有保證的順序,並且通常情況下,您希望按順序迭代元素,特別是在修改這些元素時,所以最好使用常規的for循環節點列表,這就是爲什麼他們有一個長度,是「陣列狀」。 – adeneo