javascript 我怎么可以折叠香草JS多层菜单时,其他菜单打开

8hhllhi2  于 2022-11-27  发布在  Java
关注(0)|答案(3)|浏览(150)

我创建了一个多层次的基本导航菜单使用纯JS和试图找到一个逻辑折叠一个子菜单时,其他子菜单被打开。我用foreach循环所有的菜单,其中有子菜单。但不知道如何检测其他菜单时,一个菜单被点击。有人能帮助我吗?提前感谢!
第一个

68bkxrlz

68bkxrlz1#

我试着理解你的代码来改进它,但是几个小时后就放弃了这个想法。但是,为了不给予自己,这里有一个你可以使用的变通方法...
我希望至少我的代码将帮助您在未来简化您的。
第一个

xqkwcwgp

xqkwcwgp2#

你好朋友Bitski和先生Jojo,最后我找到了一个解决方案,它是如下.请看一下,让我知道你的意见,我可以如何改进它.谢谢你们两个宝贵的时间花在我身上.谢谢你们!!!
第一个

mnowg1ta

mnowg1ta3#

您需要在菜单上循环两次,以便:
1.设置click-eventListeners(你用submenuToggle()做的不错),但是click事件监听器的回调需要一个修正。它需要把被点击链接的父<li>元素设置为参数。
参数:

<li>  // submenu's parent list element, set as argument
  <a href="">Working Strategy</a> // link with set click 
  <ul> // submenu to display or hide

已编辑的事件侦听程式:

item.addEventListener("click",(e)=>{
  e.preventDefault();
  let linkParentListElement = e.parentElement; 
  slideToggle(linkParentListElement);
});

1.根据它的兄弟<a>是否被点击来设置每个子菜单的显示属性。使用forEach()方法使其在具有子菜单的<li>上循环。在该方法的回调中,比较每个项目,如果它是在aka内点击链接的项目,如果它是linkParentListElement
如果(真):将其直接子代x1M6n1x样式设置为x1M7n1x,
if(false):将其直接子项<ul>的样式设置为display: none;

/* toggle click function for submenus */
slideToggle=(el)=> {
  let submenuParentListElement = el,
  listItems = document.querySelectorAll('div > ul > li > ul > li');
  
  listItems.forEach(function(el) {
    if (el === linkParentListElement) {
      // set display: block to its direct child <ul>
    } else {
  // set display: block to its direct child <ul>
    }
  });
}

相关问题