首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用foreach遍历class元素

使用foreach遍历class元素
EN

Stack Overflow用户
提问于 2018-02-20 23:21:58
回答 3查看 5.7K关注 0票数 0

我将一个getElementsByClassName中的所有元素都存储到一个变量中,我想我可以循环这个变量来获取其中的每个it。但它不起作用。

代码语言:javascript
复制
var el = document.getElementsByClassName("machine_btn_over_layer");
el.forEach(test);
var test = function() {
  console.log("test");
}
代码语言:javascript
复制
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>

我做错了什么?我收到一个错误,说函数不工作

EN

回答 3

Stack Overflow用户

发布于 2018-02-20 23:28:09

您需要进行两个更改。第一个数组是一个HTMLCollection,所以数组方法在这个问题上不起作用。因此,要使用数组方法,可以使用spread operator(...)将其转换为数组

其次,声明为var test = function() {}的函数永远不会被提升。所以当el.forEach被调用时,它不会得到函数,因此它会抛出undefined不是一个函数

代码语言:javascript
复制
var el = [...document.getElementsByClassName("machine_btn_over_layer")];
var test = function() {
  console.log("test");
}
el.forEach(test);
代码语言:javascript
复制
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>

票数 6
EN

Stack Overflow用户

发布于 2018-02-20 23:27:23

使用文档来帮助您!document.getElementsByClassName

名称变量elements =document.getElementsByClassName(

)

elements是找到的元素的活动HTMLCollection

HTMLCollection文档中,您应该注意到的第一件事是它没有一个名为forEach的方法。但是它确实有一个名为length的属性

HTMLCollection.length

返回集合中的项数。

和一个名为item的方法

HTMLCollection.item()

将给定索引处的特定节点返回到列表中。如果索引超出范围,则返回null。

所以你应该能够做到这一点:

代码语言:javascript
复制
for (var i = 0; i < el.length; i++) test(el.item(i));

或者使用阵列糖:

代码语言:javascript
复制
for (var i = 0; i < el.length; i++) test(el[i]);
票数 1
EN

Stack Overflow用户

发布于 2018-02-20 23:27:24

并不是每个浏览器都在getElementsByClassName方法返回的HTMLCollection上实现Array.prototype方法。

此外,变量赋值不会提升。函数声明就是这样。

代码语言:javascript
复制
var el = document.getElementsByClassName("machine_btn_over_layer");

// manually call Array.prototype.forEach on HTMLCollection
Array.prototype.forEach.call(el, test);

// replace function expression with function declaration to hoist with value
function test() {
  console.log("test");
}
代码语言:javascript
复制
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>
<div class="machine_btn_over_layer"></div>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48888574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档