javascript - 仅在单击该菜单项时出现子菜单
问题描述
我已经研究了一段时间,但我不确定如何定位这个。
当我有一个顶级菜单项有下拉菜单的菜单时,我可以编写 CSS/JS 以便在单击按钮时显示下拉菜单。但是,当您单击其中一个按钮时,它会打开所有下拉菜单。
我如何专门定位以便当您单击菜单按钮时,它只会打开该特定按钮的子菜单。
<li id="Menu-item-2135" class="menu-item">Menu 1
<ul class="sub-menu">
<li>list item 1</li>
<li>list item 2</li>
</ul></li>
//The JS
$('#menu-item-2135').click(function(){
$('.sub-menu').toggleClass('active');
});
//The CSS
.sub-menu {
display:none;
&.active {
display:flex;
}
}
我一直在使用菜单项 ID 来定位菜单项,并使用 toggleClass('active') 来显示/隐藏子菜单,但这意味着每当我向网站添加一个新菜单项时,它就会有一个子菜单菜单,我必须为该菜单 ID 编写 JS。只是想知道是否有一种方法可以调整它,这样它就可以完成所有这些,而无需为每个菜单 ID 专门编写它。
解决方案
我使用.find()
在单击的元素上查找子菜单,然后,如果您需要,如果您不需要,请在前面关闭所有打开的子菜单 $('.menu-item').each((i,e)=>{$(e).find('.sub-menu').removeClass('active')})
- 只需删除
$('.menu-item').each((index,element)=>{
$(element).on('click', ()=>{
$('.menu-item').each((i,e)=>{$(e).find('.sub-menu').removeClass('active')}) // if you need to close other sub-menu
$(element).find('.sub-menu').toggleClass('active')
})
})
.sub-menu {
display:none;
}
.sub-menu.active {
display:flex;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<li class="menu-item">Menu 1
<ul class="sub-menu">
<li>list item 1</li>
<li>list item 2</li>
</ul>
</li>
<li class="menu-item">Menu 2
<ul class="sub-menu">
<li>list item 1</li>
<li>list item 2</li>
</ul>
</li>
推荐阅读
- networking - 物理通信的通用“管道”概念的名称?
- php - Laravel 5.6 通知“没有发件人地址无法发送消息”
- python-3.x - 检查列表中的所有点都在矩形内
- c# - Bot 无法通过 WCF(连接服务)插入 SQL 数据库?
- javascript - 使用 python 中的请求从网站获取 cookie
- database - 使用 Vue 和 API 端点处理多个寄存器
- java - 列表无法转换为列表
- filter - GraphQL - 动态地将字段添加到结果中
- php - 使用 PHP 通过我的网站在 Onedrive 上上传和下载文件
- autodesk-forge - 创建对查看器的持久访问