如何在Javascript中迭代HTMLCollection

如何在Javascript中迭代HTMLCollection,javascript,arrays,Javascript,Arrays,我正在使用: var links = document.getElementsByTagName('a'); 获取页面上的所有链接。我们需要修改一些 如果我控制台日志链接,我会得到一个100+a元素的HTMLCollection。 如果我输入log links.length,则为0 我已经尝试了所有我能找到的方法来将其转换为数组,但是没有任何效果 Array.from(链接) Array.prototype.slice.call(链接) [].forEach.call(链接,函数(el){…}

我正在使用:

var links = document.getElementsByTagName('a');
获取页面上的所有链接。我们需要修改一些

如果我控制台日志链接,我会得到一个100+a元素的HTMLCollection。 如果我输入log links.length,则为0

我已经尝试了所有我能找到的方法来将其转换为数组,但是没有任何效果

Array.from(链接)

Array.prototype.slice.call(链接)

[].forEach.call(链接,函数(el){…})

HTMLCollection.prototype[Symbol.iterator]=Array.prototype[Symbol.iterator]

HTMLCollection.prototype.forEach=Array.prototype.forEach

这些都会生成一个空数组

另外
var links=document.querySelectorAll('a')生成一个空节点列表


我已经没有选择了。初始链接变量不是空的。所以我不明白为什么所有这些建议的选项都不起作用。此外,jQuery不是我们的选择。

几乎做到了:
var linksasasarray=Array.prototype.slice.call(links,0)

另外,您还可以编写一个helper函数,以避免始终需要将节点列表转换为数组。比如说,

function each(elems, fn){
  var i = -1;
  while(++i < elems.length){
    fn(elems[i])
  }
}

each(links, function(link){ console.log(link); })
每个功能(元素,fn){
var i=-1;
而(++i<元素长度){
fn(元素[i])
}
}
每个(链接,函数(链接){console.log(链接);})
这对我很有用

var links = document.getElementsByTagName('a');
var result = [].slice.call(links)
Array.from(HTML\u集合).forEach(函数(元素){
控制台日志(元素);
});

您能否在stacksnippets上重现该问题?您的问题在其他地方。顺便问一下,您列出的其他选项也起作用,您确定您的问题不在其他地方吗?我必须将代码移到页脚,这对我来说毫无意义。它能够找到所有的链接,为什么不遍历它们呢?除非代码在页脚区域。。。