3

我在外部 .js 文件中有这个 javascript 函数:

function init() {
 var v = document.getElementsByTagName('video'),i;
 console.log(v.length);
  for (i in v) {
console.log("class:" + v[i].className + "id:" + v[i].id);
}
}
init();

以及专用 html 页面中的一个视频元素。这是脚本返回到 Chrome 控制台的内容:

1     //  v.length
class:video1id:bigBunny    //first pass of for loop
class:undefinedid:undefined     //??
class:undefinedid:undefined     //??

为什么会这样?

4

2 回答 2

8

A NodeList(由 返回getElementsByTagName)不仅具有元素,还具有两个附加属性:

length   (the amount of elements)
item     (to get an element, basically the same as using [i] notation)

您也在迭代它们并将它们视为元素。他们不是; 他们没有班级也没有身份证。您应该改用数字for循环 ( for(var i = 0; i < v.length; i++)。这(不像for in)显然不能包含这样的属性。

于 2012-08-22T21:08:50.103 回答
1

无论如何,您确实应该使用传统的 for 循环。

for(var i = 0; i < v.length; i++)
{
    console.log("class:" + v[i].className + "id:" + v[i].id);
}
于 2012-08-22T21:12:05.447 回答