在getElementsByClassName的数组上使用forEach会导致“TypeError:undefined不是函数”
在我的JSFiddle中 ,我只是试图迭代一组元素。 这个数组是非空的,正如日志所certificate的那样。 然而, forEach
的调用给了我(不太有用)的“Uncaught TypeError
: undefined
不是函数”错误。
我一定在做一些愚蠢的事情。 我究竟做错了什么?
我的代码:
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
返回一个HTMLCollection ,而不是一个数组。
幸运的是,它是一个“类似数组”的对象 (这解释了为什么它被logging为一个对象,为什么你可以迭代一个标准for
循环),所以你可以这样做:
[].forEach.call(document.getElementsByClassName('myClass'), function(v,i,a) {
有了ES6(在现代浏览器或Babel),你也可以使用Array.from
从类似于数组的对象构build数组:
Array.from(document.getElementsByClassName('myClass')).forEach(v=>{
或者将类似数组的对象分散到一个数组中:
[...document.getElementsByClassName('myClass'))].forEach(v=>{
试试这应该工作:
<html> <head> <style type="text/css"> </style> </head> <body> <div class="myClass">Hello</div> <div class="myClass">Hello</div> <script type="text/javascript"> var arr = document.getElementsByClassName('myClass'); console.log(arr); console.log(arr[0]); arr = [].slice.call(arr); //I have converted the HTML Collection an array arr.forEach(function(v,i,a) { console.log(v); }); </script> <style type="text/css"> .myClass { background-color: #FF0000; } </style> </body> </html>
如果要访问特定类的每个元素的ID,可以执行以下操作:
Array.from(document.getElementsByClassName('myClass')).forEach(function(element) { console.log(element.id); });
- c:forEach抛出javax.el.PropertyNotFoundException:在java.lang.Stringtypes中找不到属性'foo'
- 如何跳出C#中的foreach循环?
- 为什么List <T> .ForEach允许其列表被修改?
- For …在JavaScript中的循环 – 键值对
- 用嵌套的Foreach语句迭代multidimensional array
- 我如何使用java的每个循环与自定义类?
- 如何从PowerShell中的ForEach-Object退出
- std :: string和string文字不一致
- 我在PHP有2个date,我怎么能运行一个foreach循环来经历所有这些日子?