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