0

次のコードの抜粋では、productsはxmlノードリストであり、その構造は次のとおりです。

<products>
  <product>
    <id>1</id>
    <name>item1</name>
  </product>
  <product>
    <id>2</id>
    <name>item2</name>
  </product>
</products>



xml = httpRequest.responseXML
products = xml.getElementsByTagName('products')


products[0].constructor
//=>ElementConstructor

product = products[0]
//=><product>…&lt;/product>

product.constructor
//=>ElementConstructor

product.getElementsByTagName('id')
//[ <id>1</id> ]

for(product in products){product.getElementsByTagName('id')}
//=>TypeError: 'undefined' is not a function (evaluating 'product.getElementsByTagName('id')')

<product>要素内の各要素を繰り返し処理し<products>、タグのみを選択するにはどうすればよいですか?

4

3 に答える 3

3

質問のタイトルは問題を表すものではありません。ANodeListは、配列であるかのように繰り返すことができます。

for(var i = 0; i < products.length; i++) {
  var product = products[i];
  // ...
}

あなたはfor inループをやっています。product次に、代わりにキー(つまり、、、 ...)を参照します0が、。1はありませんgetElementsByTagName

于 2012-08-20T08:34:35.963 に答える
2

インデックスを繰り返します。あなたが欲しい

products[product].getElementByTagName('id')
于 2012-08-20T08:34:20.747 に答える
2

for(product in products)

  • プロパティ名に番号が付いているプロパティだけでなく、オブジェクトの列挙可能なすべてのプロパティを繰り返します
  • 値ではなく、プロパティ名を提供します

このコード:

var products = document.getElementsByTagName('body');
for(product in products) { console.log(product); }

与える:

0
length
item

要素をループする場合は、通常のループを使用する必要がありforます。

for (var i = 0; i < products.length; i++) {
    var product = products[i];
    // do something with product
}
于 2012-08-20T08:35:12.300 に答える