javascript - 我想用子菜单制作一个侧边栏。我尝试了一下,但我遇到了一些错误
问题描述
我使用 选择标签getElementsByClassName
,还选择下拉菜单,getElementsByClassName
并在标签上添加一个单击事件侦听器,该侦听器在下拉列表中添加隐藏类,但它不起作用,请帮助。
这是html代码:-
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
const Nav = document.getElementsByClassName("label");
const NavUl = document.getElementsByClassName("dropdown-menu");
Nav.addEventListener("click", function () {
NavUl.classList.toggle("dpNon");
});
我想dpNon
用dropdown-menu
.
解决方案
To get the desired result you will need to select all elements like before with document.getElementsByClassName("label")
. Then loop the result, attach an event listener and then find the dropdown menu. Then you could toggle the class.
const nav = document.getElementsByClassName("label");
Array.from(nav).forEach(element => {
element.addEventListener("click", (e) => {
//Find dropdown-menu from parent
e.preventDefault();
const target = element.parentNode.querySelector(".dropdown-menu");
//
if (!target) {
return;
}
//Find openmenu
const openMenu = target.parentNode.parentNode.querySelector(".dpNon");
//deactivate openMenu if openMenu is not the target
if (openMenu && openMenu !== target) {
openMenu.classList.remove("dpNon")
}
//toggle class
target.classList.toggle("dpNon");
})
});
.dropdown-menu {
display: none;
}
.dropdown-menu.dpNon{
display: block;
}
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
<li>
<a href="#" class="label">
<span>Profile</span>
</a>
<ul class="dropdown-menu">
<li>Dropdown</li>
<li>Dropdown2</li>
<li>Dropdown3</li>
</ul>
</li>
推荐阅读
- c# - 有序抖动 - 每个通道的颜色值
- mysql - MySQL 与 Amazon RDS 实例不同步?
- excel - 将自定义函数添加到现有的 excel 加载项(由 Visual Studio 生成)
- python - Jupyter Notebook kernel dies while compiling Neural Network
- r - 如何使用 dplyr 在 r 中创建具有不同条件的不同组中的新变量
- javascript - Express.js:用户提供的服务路径
- matlab - Using a cluster of Raspberry Pi 4 as a cluster for number crunching?
- python - Regex not finding specific pair of hexadecimal character
- postgresql - How to parameterize a query using INTERVAL
- c++ - C++ 复制赋值运算符