简体   繁体   English

使用 JavaScript 切换菜单。 一键定位多个变量 function

[英]toggle menu with JavaScript. Target multiple variables with 1 click function

I am trying to make a menu that collapses on click.我正在尝试制作一个单击时折叠的菜单。 I also want to add some more changes on that same function.我还想在同一个 function 上添加更多更改。 For instance I want to change the background of another object.例如我想改变另一个 object 的背景。

In this snippet you can see it works on only the first link.在此代码段中,您可以看到它仅适用于第一个链接。 The other toggleable link is not targeted.其他可切换链接不是目标。

 var pill = document.querySelector(".navpill"); var sub = document.querySelector(".submenu"); pill.onclick = () => { sub.classList.toggle("collapse"); pill.classList.toggle("active"); }
 .mainmenu { background-color: #1f1f1f; }.navpill { padding: 15px; }.navpill.active { background: red; }.navpill a { text-decoration: none; color: white; }.submenu { display: none; }.submenu.collapse { display: block; }
 <div> <ul class="mainmenu"> <li class="navpill"><a href="#">Link collapse 1</a> <ul class="submenu"> <li class="navpill"><a href="#">sub Link 1</a></li> <li class="navpill"><a href="#">sub Link 1</a></li> <li class="navpill"><a href="#">sub Link 1</a></li> <li class="navpill"><a href="#">sub Link 1</a></li> </ul> </li> <li class="navpill"><a href="#">Link collapse 2</a> <ul class="submenu"> <li class="navpill"><a href="#">sub Link 1</a></li> <li class="navpill"><a href="#">sub Link 1</a></li> <li class="navpill"><a href="#">sub Link 1</a></li> </ul> </li> <li class="navpill"><a href="#">no link</a></li> <li class="navpill"><a href="#">no link</a></li> </ul> </div>

From a previous answer I got this piece of code which makes it work on all the links, but I have no idea how to add more var and toggles to the function.从之前的答案中,我得到了这段代码,它可以在所有链接上运行,但我不知道如何添加更多 var 并切换到 function。

var pills = document.querySelectorAll(".expand");

pills.forEach(function(pill) {
  pill.onclick = () => {
    var sub = pill.querySelector(".submenu");
    sub.classList.toggle("collapse");
  }
});

I tried adding this to the code but it does not work.我尝试将此添加到代码中,但它不起作用。

    var navpill = pill.querySelector(".navpill");
    navpill.classList.toggle("active");

If possible I would also like a way of clearing what has been done when clicked on the next submenu.如果可能的话,我还想要一种方法来清除单击下一个子菜单时所做的事情。

If I use the code above.如果我使用上面的代码。 It stays open when I click on the second link and then they are both open.当我单击第二个链接时,它保持打开状态,然后它们都打开了。 I want the first one to close if the second is clicked.如果单击第二个,我希望第一个关闭。

I think this is probably closer to what you want.我认为这可能更接近你想要的。

(It's unclear if you wanted the submenu items to be highlighted when they're clicked - currently, clicking them just collapses the menu anyway so you wouldn't see. Also I removed the hrefs because they aren't adding anything useful.) (目前尚不清楚您是否希望在单击子菜单项时突出显示它们 - 目前,单击它们只会折叠菜单,因此您不会看到。此外,我删除了 href,因为它们没有添加任何有用的东西。)

 var pills = document.querySelectorAll(".expand"); var subs = document.querySelectorAll(".submenu"); pills.forEach(function(pill) { pill.addEventListener("click", function() { var sub = pill.querySelector(".submenu"); var alreadyOpen = false; if (sub.classList.contains("collapse")) alreadyOpen = true; pills.forEach(function(pill2) { pill2.classList.remove("active"); }); subs.forEach(function(sub2) { sub2.classList.remove("collapse"); }); if (.alreadyOpen) { sub.classList;toggle("collapse"). this.classList;add("active"); } }); });
 .expand.active { background-color: red; }.expand.active >.submenu { background-color: #1f1f1f; }.mainmenu { background-color: #1f1f1f; }.navpill { padding: 15px; color: white; }.submenu { display: none; }.submenu.collapse { display: block; }
 <div> <ul class="mainmenu"> <li class="navpill expand">Link collapse 1 <ul class="submenu"> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> </ul> </li> <li class="navpill expand">Link collapse 2 <ul class="submenu"> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> <li class="navpill">sub Link 1</li> </ul> </li> <li class="navpill">no link</li> <li class="navpill">no link</li> </ul> </div>

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

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