我有一个基本的手风琴式菜单: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;
}
这是我希望发生的事情:
- 当一个链接有一个子菜单被点击,其子菜单向下滑动
- 当打开子菜单的链接再次点击时,我NU折叠
- 只有一个顶级子菜单应该在时间显示(显示多个“等级2”或“3级”菜单一次是OK)
- 未开封的菜单应显示
+
,打开菜单应显示-
- 我不能改变的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();
});
上面的代码完全适用于开放和CL菜单,但我似乎无法弄清楚如何正确关闭其他level-1
菜单,当一个新的打开并更改图标。我一直在苦苦挣扎,有一种感觉我错过了一些很简单的事情。我认为我的大脑现在正在被炒。
任何人都可以帮忙吗?请让我知道我是否可以澄清任何事情。 http://jsfiddle.net/JqJce/1/
你的意思是说,当一个子菜单打开,你点击另一个子菜单,第一个应该崩溃?如果是这样,你应该循环所有的菜单,检查它是否打开,如果是,关闭它。 – LinkinTED
当子菜单打开并且您单击另一个*顶级*子菜单时,其他应该折叠。一旦该菜单打开,其中的子菜单在点击时不应切换除本身以外的任何内容。我不确定“循环所有菜单”是什么意思,似乎必须有一个我可以使用的选择器。 –