为什么我不能迭代getElementsByTagName返回的所有元素?

Xeo*_*oss 1 javascript dom

我试图用另一个标签替换一组标签,但由于某种原因,我似乎无法循环getElementsByTagName()返回的所有标签.

在这个例子中,第二td,第一行中跳过了,即使它在展示了一些原因console.log(tds).

我的代码出了什么问题?

Poi*_*nty 6

将第一行更改为:

var tds = [].slice.call(document.getElementsByTagName('td'), 0);
Run Code Online (Sandbox Code Playgroud)

返回的值.getElementsByTagName()是NodeList,而不是数组.NodeList对象是"实时"的,这意味着它们会在您更改DOM时发生更改.也就是说,tds.length正在递减,但你i的增量也在增加 - 因此你每次迭代都缺少一个元素.如果你先把它变成一个数组,如上所述,那么你的代码应该可行.

  • 如果你愿意,可以遍历NodeList,@ Xeoncross - 要操作的节点将始终是列表中的第一个节点,因为一旦你将它改为`<b>`它就会消失. (2认同)