js如何循环HTMLCollection

场景

当使用document.getElementsByClassName方法获取一个包含DOM节点的集合arr时,正常的forEach和map操作都会报一个arr.map is not a function的错误

因为这里的arr并不是标准的 数组 (Array),而是一个 HTMLCollection

解决

  1. 使用document.querySelectorAll获取节点列表
  2. 转为数组
bash 复制代码
Array.from(arr).forEach(v => {
  v.childNodes[0].style.display = 'none';
});
  1. 扩展运算符
bash 复制代码
[...arr].forEach(v => {
  v.childNodes[0].style.display = 'none';
});
  1. 用传统 for 循环
bash 复制代码
for (let i = 0; i < arr.length; i++) {
  arr[i].childNodes[0].style.display = 'none';
}

拓展

  1. 这是一个右击出现弹窗的事件,每个节点都对应一个弹窗,可左键一键清空
bash 复制代码
handleRightClickPoint(index, e){
  e.preventDefault();
  let t = document.getElementsByClassName('hangdian-right')
  let totalnodes = t[index].childNodes
  totalnodes[0].style.display = 'block';
  totalnodes[0].style.left = (e.clientX + 18) + 'px';
  totalnodes[0].style.top = (e.clientY - 5) + 'px';
  totalnodes[0].onclick = function() {
    totalnodes[0].style.display = 'none';
  };
  document.onclick = function() {
    [...t].forEach(v=>{
      v.childNodes[0].style.display = 'none';
    })
  };
},
相关推荐
Buke..3 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
前端炒粉4 小时前
长会话虚拟滚动与渲染优化
前端·javascript·vue.js
谙忆10244 小时前
图片裁剪总是跑偏?用 object-fit、object-position 和真实像素把坐标对齐
javascript·css·图像识别
花归去5 小时前
ant的a-table更改表格的高度
前端·javascript·html
sibylyue5 小时前
基于 Vben Admin 框架的 Vue 3 前端项目配置文件及常用命令
前端·javascript·vue.js
AC赳赳老秦7 小时前
多源数据关联挖掘:OpenClaw 打通工商、招投标、专利公开数据,挖掘企业业务关联关系
java·c语言·javascript·c++·python·deepseek·openclaw
光影少年8 小时前
react navite 内存泄漏:定时器、监听事件、订阅销毁
前端·javascript·react native·react.js·前端框架
breeze jiang8 小时前
Next.js 16 App Router 实战:从 About、Blog 动态路由到全局 404
开发语言·javascript·ecmascript
zh_xuan10 小时前
个人主页左侧菜单支持分组,以及菜单显示和隐藏
前端·javascript·css
Ming_studying10 小时前
HTML + CSS + JavaScript实现可视化JSON工具:格式化、折叠、搜索与错误定位
javascript·css·html·json·数据可视化·web工具