jquery - jquery控制的多级html菜单
问题描述
我正面临多级菜单的问题。我需要 jQuery 来显示或隐藏当前选定的子菜单,并保持其他没有变化。我对 JQuery 还不是很熟练,所以任何帮助都将不胜感激。我在这里与你分享我所拥有的。提前致谢!
我想提一下,我在 StackOverflow 上找到了一个部分工作的示例。经过一些调试后,我意识到var mobileMenu.css
返回undefined
,这使得代码有时可以工作。
var test1 = $('ul.hdrMenu li');
test1.on( 'click', function(e)
{
var mobileMenuItem = $(e.target).parent().find( '> ul.sub-menu' );
if( **typeof mobileMenuItem.css('display') === "undefined"** )
{
mobileMenuItem = $(e.target).parent().parent().find( '> ul.sub-menu' );
}
if( mobileMenuItem.css('display') == 'none' )
{
e.preventDefault();
mobileMenuItem.slideDown();
e.stopPropagation();
}
else if( mobileMenuItem.css('display') == 'block' )
{
e.preventDefault();
mobileMenuItem.slideUp();
e.stopPropagation();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="hdrMenu">
<li><a href="#">Inicio</a></li>
<li><a href="#">Servicios</a>
<ul class="sub-menu">
<li><a href="#">L1</a></li>
<li><a href="#">L2</a>
<ul class="sub-menu">
<li><a href="#">L2-1</a></li>
<li><a href="#">L2-2</a></li>
</ul>
</li>
<li><a href="#">L3</a></li>
<li><a href="#">L4</a>
<ul class="sub-menu">
<li><a href="#">L4-1</a></li>
<li><a href="#">L4-4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Acerca de</a>
<ul class="sub-menu">
<li><a href="#">Sub1</a></li>
<li><a href="#">Sub2</a></li>
<li><a href="#">Sub3</a></li>
<li><a href="#">Sub4</a></li>
</ul>
</li>
<li><a href="#">Contacto</a></li>
</ul>
解决方案
代码工作得很好我认为你只需要删除父选择器.hdrNav
就可以了:
var test1 = $('ul.hdrMenu li');
或者您可以保留选择器的原样并添加一个带有 class 的父 div hdrNav
。
var test1 = $('ul.hdrMenu li');
test1.on('click', function(e) {
var mobileMenu = $(e.target).parent().find('> ul.sub-menu');
if (mobileMenu.css('display') == 'none') {
e.preventDefault();
mobileMenu.slideDown();
e.stopPropagation();
} else if (mobileMenu.css('display') == 'block') {
e.preventDefault();
mobileMenu.slideUp();
e.stopPropagation();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="hdrMenu">
<li><a href="#">Inicio</a></li>
<li><a href="#">Servicios</a>
<ul class="sub-menu">
<li><a href="#">L1</a></li>
<li><a href="#">L2</a>
<ul class="sub-menu">
<li><a href="#">L2-1</a></li>
<li><a href="#">L2-2</a></li>
</ul>
</li>
<li><a href="#">L3</a></li>
<li><a href="#">L4</a>
<ul class="sub-menu">
<li><a href="#">L4-1</a></li>
<li><a href="#">L4-4</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#">Acerca de</a>
<ul class="sub-menu">
<li><a href="#">Sub1</a></li>
<li><a href="#">Sub2</a></li>
<li><a href="#">Sub3</a></li>
<li><a href="#">Sub4</a></li>
</ul>
</li>
<li><a href="#">Contacto</a></li>
</ul>
推荐阅读
- ipc - 无法从另一个孩子读取一个孩子写入的共享内存
- c# - appsetting.json 如何在多个项目 .net 核心中工作?
- swift - 为什么我的 Swift Process() 启动路径会吐出“启动路径不可访问”?
- sql-server - SQL Server 中的 Begin & End 是否作为事务工作
- .htaccess - htaccess 301 重定向具有多个变量的 joomla URL
- mysql - Mysql 一对多表
- amazon-s3 - Terraform:将服务器日志记录添加到 S3 存储桶
- javascript - 多个输入文本框,链接到文件描述?
- html - 在这种情况下,如何在 html/php 中将先前的选择存储在下拉菜单中
- c# - C# 集成测试错误