In 我的 JSFiddle http://jsfiddle.net/jer2/zcrh9/3/,我只是想迭代一个元素数组。正如日志语句所证明的那样,该数组非空。然而,呼叫forEach
给了我(不太有帮助)“未捕获TypeError
: undefined
不是一个函数”错误。
我一定是做了什么蠢事;我究竟做错了什么?
My code:
var arr = document.getElementsByClassName('myClass');
console.log(arr);
console.log(arr[0]);
arr.forEach(function(v, i, a) {
console.log(v);
});
.myClass {
background-color: #FF0000;
}
<div class="myClass">Hello</div>
那是因为document.getElementsByClassName
返回一个HTML集合 https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection,不是数组。
幸运的是,这是一个“类数组”对象 https://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-7/array-like-objects(这解释了为什么它被记录为一个对象,以及为什么你可以使用标准迭代for
循环),所以你可以这样做:
[].forEach.call(document.getElementsByClassName('myClass'), function(v,i,a) {
使用 ES6(在现代浏览器或 Babel 上),您还可以使用Array.from https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from它从类似数组的对象构建数组:
Array.from(document.getElementsByClassName('myClass')).forEach(v=>{
或将类似数组的对象展开到数组中:
[...document.getElementsByClassName('myClass'))].forEach(v=>{
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)