Javascript 无法在HtmlCollection上迭代

Javascript 无法在HtmlCollection上迭代,javascript,getelementsbytagname,htmlcollection,Javascript,Getelementsbytagname,Htmlcollection,我有一个简单的代码问题 var x = document.getElementsByTagName("th"); var plop = Array.prototype.slice(x); console.log(x); console.log(x.length); console.log(plop); 输出 [item: function, namedItem: function] 0: th.fc-day-header.fc-sun.fc-widget

我有一个简单的代码问题

    var x = document.getElementsByTagName("th");
    var plop = Array.prototype.slice(x);
    console.log(x);
    console.log(x.length);
    console.log(plop);
输出

[item: function, namedItem: function]
0: th.fc-day-header.fc-sun.fc-widget-header.fc-first
1: th.fc-day-header.fc-mon.fc-widget-header
2: th.fc-day-header.fc-tue.fc-widget-header
3: th.fc-day-header.fc-wed.fc-widget-header
4: th.fc-day-header.fc-thu.fc-widget-header
5: th.fc-day-header.fc-fri.fc-widget-header
6: th.fc-day-header.fc-sat.fc-widget-header.fc-last
length: 7__proto__: HTMLCollection
    controller.js:309 0
    controller.js:310 []
为什么我在这里看到长度7,而x.length给出0

提前谢谢

更新:我在中设置了代码

$scope.$on('$viewContentLoaded', function(){
}
现在它可以工作了。我还无法设置onclick方法,但它正在进行^ ^

当您尝试从HTMLCollection创建数组副本时,缺少.call。与此相反:

$scope.$on('$viewContentLoaded', function(){

var x = document.getElementsByTagName("th");
var arr =  Array.prototype.slice.call(x);
        console.log(arr);
        for (var i = 0; i < arr.length; i++) {
           // console.log("iterate");
            console.log(arr[i]);
            arr[i].onclick = function(){
                console.log("lol");
            };
        }
};
var x = document.getElementsByTagName("th");
var plop = Array.prototype.slice(x);
您可以这样做:

var x = document.getElementsByTagName("th");
var plop = Array.prototype.slice.call(x);
console.log(plop);
注意:您不需要仅为了迭代而创建数组副本。您可以直接迭代HTMLCollection:

var items = document.getElementsByTagName("th");
for (var i = 0; i < items.length; i++) {
    console.log(items[i]);
}

在这里工作很好:对于您发布的代码,我希望x.length==7,但plop.length==0。您使用Array.prototype.slice的方式不正确。您应该改为执行Array.prototype.slice.call x。请参阅:thx与您的拼接工作正常:或[].slice.callx too.forlet i=0;i@YashdeepHinge-为了帮助您,我们需要查看您的特定代码。要做到这一点,您应该发布您自己的问题,其中包含您自己的代码,并准确描述您观察到的错误。注释不是用来询问关于您自己代码的问题的。发布您自己的问题。尝试在chrome开发控制台上运行此代码。var tweets=document.getElementsByClassNamejs-tweet-text;forvar i=0;i@YashdeepHinge-请发表您自己的问题。在stackoverflow上,在评论中对新情况提出新问题是不合适的。然后,人们可以为你的具体情况提供实际的答案。哦,是的,你的权利,我会发布一个问题。虽然我用不同的方法完成了任务,但我会问这个问题,以了解为什么它没有按预期的方式工作。