踩坑JS:获取 document.querySelector.children获取的 HTMLCollection 的正确遍历姿势!

一、获取到 HTMLCollection

 const domlist = document.querySelector(".header-left-Menu-style").children;

在这里插入图片描述
这里的 domList 就是 HTMLCollection 对象,是个类数组,不能使用map等方法;最后使用 for 循环完成的遍历;如下所示

二、场景

自己编写后台管理页面,左 上下layout 结构,使用zent组件库。
左侧路由使用 Menu 组件功能不全,只提供了一个初始默认选项,这就导致了一个问题:
一、左侧单独切换路由时,没问题;
二、问题在于——从其他页面换路由时,因为不是受控组件、左侧Menu根本不会切换。
三、好容易获取到了对应的标签数组列表,反正不能使用map等方法遍历,通过查资料发现原来获取的是个类数组HTMLCollection。

Zent-Menu:https://zent-contrib.gitee.io/zent/zh/component/menu

参数说明类型
onClick点击菜单节点回调func
onSubMenuClick点击子菜单(非叶子节点)的回调, 入参为子菜单 IDfunc
onExpandChange菜单展开/折叠时的回调, 入参为此时处于展开状态的func
SubMenuid 数组func
style自定义内联样式object
mode模式string
defaultExpandKeys默认展开的SubMenu的keysarray
defaultSelectedKey默认选中的MenuItem的keystring
className节点类名string

三、解决办法

思路:页面路由切换,只需要监听一下路由的变化,从而判断当前路由对应左侧Menu的哪个子元素,给对应的子元素做一个点击事件即可。

useEffect(()=>{
   // 监听路由的变化 location.pathname
   // 通过遍历【路由列表routerList】获取到 location.pathname(key) 对应的路由名称
   // 通过获取 Menu 标签子元素(li)的内容--即routerList[item].innerHTML
   // 遍历 MenuNameList, 找到指定的li子元素,添加点击事件;
   const domList = document.querySelector(".header-left-Menu-style").children;
   const locationPathname = location.pathname;
   let activeMenuName = '';
   for(let i = 0;i < routerList.length;i ++){
     if(routerList[i].path === locationPathname){
       activeMenuName = routerList[i].MenuName
     }
   }
   for(let i = 0;i< domList.length;i ++){
     if(domList[i].innerHTML === activeMenuName){
       domList[i].click()
     }
   }
 },[location.pathname])

四、菜鸟教程传送门https://www.runoob.com/jsref/dom-htmlcollection.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值