有两种不同长度的阵列?

时间:2015-08-20 22:42:15

标签: javascript

我用:

创建了一个数组
var links = document.getElementsByTagName('a');  

如果我这样做:

console.log(links.length);  

我得到:2。

但是,如果我这样做:

console.log(links);

我得到一个看起来像这样的对象:

[a.elm-skip-link,a]

当我展开这个对象时,其中有33个链接对象。

为什么链接对象的长度会发生变化?如果它是一个数组,它是否保留了创建时的大小?

以下是我使用的所有代码:

var links = document.getElementsByTagName('a');
console.log('links:');
console.log(links);
console.log('length:');
console.log(links.length);  

BTW:我试图选择页面上没有" id"的特定链接。或者" class"属性,所以我需要获取所有链接,然后遍历它们以找到具有"标题"属性我正在寻找。但是,当我试图遍历这个"链接"对象,循环只运行两次,尽管页面上有33个链接。

1 个答案:

答案 0 :(得分:3)

getElementsByTagName实际上并不返回一个数组,它返回一个像对象一样的数组,它是实时的HTMLCollection

实际意味着每次修改DOM时,都会修改集合(或返回的数组,如对象)。

所以,如果我不得不猜测,我会假设当你第一次调用这个函数时你的DOM没有完全加载。它返回的集合只包含两个元素,并将它们发送到控制台。

稍后,当您展开集合时,DOM已被修改,您将看到生成的33个元素。