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循环。productthen 指的01没有getElementsByTagName.

于 2012-08-20T08:34:35.963 回答
2

For in 迭代索引。你要

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 回答