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';
    })
  };
},
相关推荐
Live0000020 小时前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉20 小时前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
球球pick小樱花20 小时前
游戏官网前端工具库:海内外案例解析
前端·javascript·css
喝水的长颈鹿21 小时前
【大白话前端 02】网页从解析到绘制的全流程
前端·javascript
用户145369814587821 小时前
VersionCheck.js - 让前端版本更新变得简单优雅
前端·javascript
codingWhat21 小时前
整理「祖传」代码,就是在开发脚手架?
前端·javascript·node.js
码路飞21 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
Lee川21 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
一拳不是超人1 天前
Electron主窗口弹框被WebContentView遮挡?独立WebContentView弹框方案详解!
前端·javascript·electron