web-dev-qa-db-ja.com

JavaScriptはNodeListを繰り返します

私は長さを除くノデリストを除くことを繰り返すための最良の方法を探しています。使ってます:

var foo =  document.querySelectorAll('[id^=foo_id]')
console.log(foo)
 _

返されたNodeListには、必要な要素+ Lengthの最後のエントリがあります。

  0: input#foo_id_...
  1: input#foo_id_...
  ..................
  n: input#foo_id_...
  length: n+1
 _

私はそのノデリストを通して反復するための最も効率的な方法を疑問に思います。リストの長さなどを利用できますが、より「優雅」な方法があるかどうかを知りたいです。

14
goryef

最も簡単な方法はforループです。

_for (let i = 0; i < foo.length; i++) {
  // Do stuff
}
_

これは ここでの 指摘されているのは最良の解決策です( - === - )アレイメソッドを使用するか、またはNodeListを配列に変換することは悪いです - 必要な場合は別の変数を使用します。に、しかしforループはすべてノデリストをループする必要があるのです。 (これを私に指すように感謝します)。

forEachmapなどのような配列メソッドを使用したい場合は、最初に配列に最もよく変換されます。これは拡散で非常に簡単です。

_[...foo].forEach(e /* Do stuff */);
_

mapを特に使用したい場合は、2番目の引数として_Array.from_を使用すると、mapに適用されるコールバックです。

_Array.from(foo, e => /* .map callback */);
_

そして古い環境で:

_Array.prototype.slice.call(foo).forEach(e => /* Do stuff */);
_

(私はあなたがNodeListで配列メソッドを使用できることを知っていますが、1つのデータ型の使用に固執するならばは簡単です。)

2
Jack Bashford

NodeListは配列ではありませんが、foreach()でそれを繰り返すことが可能です。

NodeListは何が余裕がないのはなぜですか?

0
neuhaus