2016-10-16 5 views
0

これはとてもシンプルにする必要があるので少し愚かだと感じていますが、かなり不満を感じています。for-in-loopの中でquerySelectorAllを使用する

私は一度に1つしか表示したくないdivがいくつかあるので、残りを隠したいと思います。私のアプローチ:

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

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

Firefoxは常にelements[i].style.setProperty();は未定義です。 inを使用せずに通常のfor-loopを使用して回避策を講じましたが、なぜこれが機能しないのか知りたいのですが。

ありがとうございます!

答えて

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

hh。実際、これが私が回避策として行ったことです。私は直接的なプロパティ変更を介して設定するよりも、 'スタイル 'を設定するメソッドを使用する方が適切なコードであると考えました。 なぜ、私は定期的なfor-loopを使わなければならないのですか?私はそれが動作することを確認しますが、なぜ私のバージョンではないでしょうか... –

+0

まず、 'for..in'ループを使用して、いくつかのまれなケースで問題を引き起こす可能性のあるすべての列挙可能なプロパティを繰り返します。また、 'for ... in'ループに順序が保証されていない場合、特にそれらの要素を変更する場合には、順番に要素を繰り返し処理したいときがありますので、通常の' for'ループを使用することをお勧めします。 nodelists、そしてそれはなぜ彼らが長さを持っている、 "配列のような"です。 – adeneo

関連する問題