枚举Javascript中getElementByClassName返回的元素

枚举Javascript中getElementByClassName返回的元素,javascript,Javascript,我有下面的标记和脚本来模拟一个简单的计算器 HTML: 这里的问题是,当我遍历按钮并尝试附加事件处理程序时,它抛出了一个异常。但是,当使用getElementById直接检索按钮时,代码起作用 您能解释一下原因吗?document.getElementsByCassName()返回一个类似数组的对象,该对象最好像这样迭代: var buttons = document.getElementsByClassName("number"); for (var i = 0; i < buttons

我有下面的标记和脚本来模拟一个简单的计算器

HTML:

这里的问题是,当我遍历按钮并尝试附加事件处理程序时,它抛出了一个异常。但是,当使用getElementById直接检索按钮时,代码起作用


您能解释一下原因吗?

document.getElementsByCassName()
返回一个类似数组的对象,该对象最好像这样迭代:

var buttons = document.getElementsByClassName("number");
for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener("click", numberClick, false);
}
var buttons=document.getElementsByClassName(“编号”);
对于(变量i=0;i

您可以按原来的方式迭代数组(但不推荐,因为它迭代所有可枚举属性,而不仅仅是数组元素,有时会弄乱代码),但如果您这样做,则对象将是
按钮[btn]
,而不是您试图使用的
btn

document.getElementsByClassName()
返回一个类似数组的对象,它的迭代效果更好,如下所示:

var buttons = document.getElementsByClassName("number");
for (var i = 0; i < buttons.length; i++) {
    buttons[i].addEventListener("click", numberClick, false);
}
var buttons=document.getElementsByClassName(“编号”);
对于(变量i=0;i

您可以按原来的方式迭代数组(但不推荐,因为它迭代所有可枚举属性,而不仅仅是数组元素,有时会弄乱代码),但如果您这样做,则对象将是
按钮[btn]
,而不是像您尝试使用的
btn

节点列表类似于数组,因此,应该使用常规for循环,querySelectorAll具有更好的支持

window.onload = function() {

    var buttons = document.querySelectorAll("number");

    for (var i=buttons.length; i--;) {
        buttons[i].addEventListener("click", numberClick, false);
    }
}
使用for in循环时,它是

for ( key in object )
是的

for (var btn in buttons) {
    buttons[btn].addEventListener
}

节点列表类似于数组,因此应该使用常规for循环,querySelectorAll具有更好的支持

window.onload = function() {

    var buttons = document.querySelectorAll("number");

    for (var i=buttons.length; i--;) {
        buttons[i].addEventListener("click", numberClick, false);
    }
}
使用for in循环时,它是

for ( key in object )
是的

for (var btn in buttons) {
    buttons[btn].addEventListener
}

this.innerText
应该是
this.textContent
有什么异常?@bjb568//JavaScript运行时错误:对象不支持属性或方法“addEventListener”this.innerText
应该是
this.textContent
有什么异常?@bjb568//JavaScript运行时错误:对象不支持属性或方法方法'addEventListener'没有人关心IE。太可怕了,无法支持。@bjb568-事实上,我认为
getElementsByClassName()
的返回值不支持
。forEach()
,因为它是节点列表或HTMLCollection,而不是数组。您可以转换它。节点列表通常不支持数组方法。every、some、forEach等都不起作用。@bjb568-是的,您可以转换它,但是为什么还要麻烦使用
.forEach()
。如果您必须添加额外的步骤才能将其转换为数组,那么通过
for
循环它不会为您带来任何好处。没有人关心IE。太可怕了,无法支持。@bjb568-事实上,我认为
getElementsByCassName()
的返回值不支持
。forEach()
,因为它是节点列表或HTMLCollection,不是数组。你可以转换它。节点列表通常不支持数组方法。every、some、forEach等都不起作用。@bjb568-是的,您可以转换它,但是为什么还要麻烦使用
.forEach()
。如果您必须添加额外的步骤来将其转换为数组,那么它不会通过
for
循环为您带来任何好处。