3

Chrome 拡張機能を開発していて、ノードリスト タイプに問題があります。

var compoentChange = document.getElementById("component_change");
var items = compoentChange.getElementsByTagName("option");

console.log(items)表示されます[item: function]。展開すると、すべてのオプション要素と長さプロパティが含まれています。

問題は、これらの要素にアクセスできないことです。私console.log(items.length)が 、私が得るときundefined

items変数を反復処理するにはどうすればよいですか?

for(i in items){}およびforループは機能しません。

4

5 に答える 5

1

まだ実行できるitems.lengthので、このようなforループを作成するだけです。配列にプッシュすることをお勧めします。

var myArray = [];

for(var i=0; i<items.length; i++){
     myArray.push(items[i]);
}

これがオプションでない場合は、次のような方法を試してください。

var myArray = [];
for(var i=0, e=1; i<e; i++ ){
   if(items[i] != undefined){
      e++;
      myArray.push(items[i]);
   }else{
      break;
   }
}
于 2013-02-07T03:36:55.663 に答える
1

NodeListsは配列のようなオブジェクトです。通常のforループ(ではないfor..in)で繰り返すことができます:

for (var i = 0; i < items.length; i++) { ... }

または、この配列のようなオブジェクトを実際の配列に変換して、ネイティブ配列メソッドを使用することもできます。

[].forEach.call(items, function(item) { ... });
于 2013-02-07T03:37:35.210 に答える
1

ページロード中に 2 つのログを記録している場合、属性ではNodeListなくconsole.log() できる理由は、 が「ライブ」コレクションであるためです。どちらも DOM の読み込みが完了するまで未定義ですが、はライブであるため、Chrome コンソールで更新されます。ログに記録されたとき、属性は定義されていませんでした。ライブではないため、コンソールに残ります。lengthNodeListNodeListlengthundefined

いつでも nodeList を参照するように変数を設定できますが、DOM の準備が整うまで待ってから、(document.ready関数またはおそらくを使用してdocument.addEventListener()) データを使用してください。

于 2013-12-02T17:50:42.357 に答える
0

for...of は、この状況で使用できます。ただし、バグのため、この機会はクロムでは使用できません。

于 2016-01-08T19:25:44.960 に答える