我有一个基本的手风琴风格菜单:http: //jsfiddle.net/JqJce/1/
<ul class="nav level-1">
<li><a href="#">Link</a></li>
<li class="has-submenu"><a href="#">Link</a>
<ul class="level-2">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul></li>
<li class="has-submenu"><a href="#">Link</a>
<ul class="level-2">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li class="has-submenu"><a href="#">Link</a>
<ul class="level-3">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul></li>
</ul></li>
<li class="has-submenu"><a href="#">Link</a>
<ul class="level-2">
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul></li>
</ul>
a {
display:block;
background:#aaa;
border:1px solid #ccc;
padding:5px;
color:#fff;
}
li li {
display:none;
}
/* Open/Closed indicators */
.has-submenu > a:after {
content:' + ';
}
.has-submenu .nav-open:after {
content:' - ';
}
li li a {
padding-left:40px;
background:#888;
}
li li li a {
padding-left:80px;
background:#333;
}
这就是我想要发生的事情:
- 单击具有子菜单的链接时,其子菜单会向下滑动
- 再次单击打开的子菜单的链接时,菜单会折叠
- 一次只能显示一个顶级子菜单(一次显示多个“2级”或“3级”菜单是可以的)
- 应该显示未打开的菜单
+
,打开的菜单应该显示-
- 不幸的是,我无法更改 HTML 标记
这是我所拥有的:
$('.has-submenu > a').on('click', function(e){
e.preventDefault();
// Need to add/remove .nav-open from links
// $('a').removeClass('nav-open');
$(this).toggleClass('nav-open');
// Not sure what I'm thinking here...
// $('.level-1 > .has-submenu').not($(this).parent()).find('li').slideUp();
// Sort of works, but clicking an open menu makes it close and open again
// $('.level-2 > li').not($(this).parent()).slideUp();
$(this).next('ul').find('> li').slideToggle();
});
上面的代码非常适合打开和关闭菜单,但我似乎无法弄清楚如何在level-1
打开新菜单并更改图标时正确关闭其他菜单。我已经为此苦苦挣扎了一段时间,感觉我错过了一些相当简单的东西。我想我的大脑现在只是炸了。
任何人都可以帮忙吗?如果我能澄清任何事情,请告诉我。http://jsfiddle.net/JqJce/1/