我用:
创建了一个数组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个链接。
答案 0 :(得分:3)
getElementsByTagName实际上并不返回一个数组,它返回一个像对象一样的数组,它是实时的HTMLCollection。
实际意味着每次修改DOM时,都会修改集合(或返回的数组,如对象)。
所以,如果我不得不猜测,我会假设当你第一次调用这个函数时你的DOM没有完全加载。它返回的集合只包含两个元素,并将它们发送到控制台。
稍后,当您展开集合时,DOM已被修改,您将看到生成的33个元素。