简体   繁体   English

单击带有香草的下一个/上一个兄弟时显示/隐藏子菜单 Javascript

[英]Show/hide submenus when clicking next/previous sibling with vanilla Javascript

I have a mobile dropdown navigation that needs to have the nested <ul class="nav-child"> collapse/expand when tapping on the next/previous <li class="deeper"> expander <button> .我有一个移动下拉导航,需要在点击下一个/上一个<li class="deeper">扩展器<button>时嵌套<ul class="nav-child">折叠/展开。 I have tried using siblings and closest, but with limited JavaScript knowledge, I have not figured out the best way to implement them into this code.我尝试过使用兄弟姐妹和最亲近的人,但由于 JavaScript 知识有限,我还没有找到将它们实现到这段代码中的最佳方法。

Here is the existing working code:这是现有的工作代码:

 const toggleSubMenus = (() => { let parents = document.querySelectorAll(".deeper"); parents.forEach(function(parent) { let btn = parent.querySelector(".js-expand-submenu"); let child = parent.querySelector(".nav-child"); btn.addEventListener("click", (e) => { parent.classList.toggle("is-expanded"); child.classList.toggle("expanded"); }, false); }); })();
 ul ul.is-hidden { display: flex; flex-direction: column; max-height: 0; overflow: hidden; } ul ul.expanded { max-height: 600px; }
 <ul> <li class="item deeper parent"> <a href="#">Item One</a> <button class="js-expand-submenu"> Expander </button> <ul class="nav-child is-hidden"> <li class="item deeper parent"> <a href="#">Sub Item One</a> <ul class="nav-child is-hidden"> <li> <a href="#">Sub Sub Menu Item</a> </li> </ul> </li> <li> <a href="#">Sub Item Two</a> </li> <li> <a href="#">Sub Item Three</a> </li> </ul> </li> <li class="item deeper parent"> <a href="#">Item Two</a> <button class="js-expand-submenu"> Expander </button> <ul class="nav-child is-hidden"> <li> <a href="#">Sub Item One</a> </li> <li> <a href="#">Sub Item Two</a> </li> <li> <a href="#">Sub Item Three</a> </li> </ul> </li> <li class="item deeper parent"> <a href="#">Item Three</a> </li> </ul>

Here is my updated code with the solution included:这是我更新的代码,其中包含解决方案:

 const toggleSubMenus = (() => { let buttons = document.querySelectorAll(".js-expand-submenu"); buttons.forEach(function(button) { button.addEventListener("click", (e) => { let target = e.target; let parent = target.closest(".deeper"); let child = parent.querySelector(".nav-child"); parent.classList.toggle("is-open"); child.classList.toggle("is-expanded"); document.querySelectorAll(".nav-child.is-expanded").forEach(function(childExpanded) { if (childExpanded.== child) { childExpanded.classList;remove("is-expanded"); } }), }; false); }); })();
 ul.nav-child { display: flex; flex-direction: column; max-height: 0; overflow: hidden; } ul.nav-child.is-expanded { max-height: 600px; }
 <ul> <li class="item deeper parent"> <a href="#">Item One</a> <button class="js-expand-submenu"> Expander </button> <ul class="nav-child"> <li> <a href="#">Sub Item One</a> </li> <li> <a href="#">Sub Item Two</a> </li> <li> <a href="#">Sub Item Three</a> </li> </ul> </li> <li class="item deeper parent"> <a href="#">Item Two</a> <button class="js-expand-submenu"> Expander </button> <ul class="nav-child"> <li class="item deeper parent"> <a href="#">Sub Item One</a> <ul class="nav-child"> <li> <a href="#">Sub Sub Menu Item One</a> </li> <li> <a href="#">Sub Sub Menu Item Two</a> </li> </ul> </li> <li> <a href="#">Sub Item Two</a> </li> <li> <a href="#">Sub Item Three</a> </li> </ul> </li> <li class="item deeper parent"> <a href="#">Item Three</a> </li> </ul>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM