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 ページに 1 つのビデオ要素。これはスクリプトが Chrome コンソールに返すものです:

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

なぜこうなった?

4

2 に答える 2

8

(NodeListによって返されるgetElementsByTagName) には、要素だけでなく、次の 2 つの追加プロパティがあります。

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

それらも繰り返し処理し、要素であるかのように扱っています。そうではありません。クラスも ID もありません。代わりに数値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 に答える