好的,这可能很简单,但不能使它成为…
我想做的是一个多级支持的子菜单。
现在一步一步地:
问题:所有点击的li > ul都保持打开。
我怎样才能使以前点击的子导航关闭?
例:当您单击Item1时,它会显示Item1 >Level1Subnav,但即使在单击项2子导航后仍保持打开状态。当您单击第2项时,Item1应关闭。
$(document).ready(function() {
// Toggle Sub Nav
$("#nav li:has(ul)").children("ul").hide(); // hide the li UL
$("#nav li:has(ul)").find("a").click(function() {
// Add .show-subnav class to revele on click
$(this).parent().find("ul:first").toggleClass("show-subnav");
// how to hide previously clicked submenus?
});
});#nav .show-subnav {
display: block!important;
}<!-- Nav primary start -->
<nav id="nav">
<ul>
<li><a href="#">Item 1 Submenu</a>
<ul>
<li><a href="#">Level 1 Submenu</a>
<ul>
<li><a href="#">Level 2 </a>
</li>
<li><a href="">Level 2 </a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="#">Level 2</a>
</li>
</ul>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#">Item 2 Submenu</a>
<ul>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#section-3">Link 3</a>
</li>
<li><a href="#section-4">Link 4</a>
</li>
<li><a href="#section-5">Link 5</a>
</li>
</ul>
</nav>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
发布于 2015-05-21 04:51:47
使用.removeClass()删除已经打开的ul
$(document).ready(function() {
// Toggle Sub Nav
$("#nav li:has(ul)").children("ul").hide(); // hide the li UL
$("#nav li:has(ul)").find("a").click(function() {
var parent = $(this).parent()
parent.siblings().find("ul.show-subnav").removeClass("show-subnav");
parent.find("ul:first").toggleClass("show-subnav");
});
});
$(document).ready(function() {
// Toggle Sub Nav
$("#nav li:has(ul)").children("ul").hide(); // hide the li UL
$("#nav li:has(ul)").find("a").click(function() {
// Add .show-subnav class to revele on click
var parent = $(this).parent()
parent.siblings().find("ul.show-subnav").removeClass("show-subnav");
parent.find("ul:first").toggleClass("show-subnav");
// how to hide previously clicked submenus?
});
});#nav .show-subnav {
display: block!important;
}<!-- Nav primary start -->
<nav id="nav">
<ul>
<li><a href="#">Item 1 Submenu</a>
<ul>
<li><a href="#">Level 1 Submenu</a>
<ul>
<li><a href="#">Level 2 </a>
</li>
<li><a href="">Level 2 </a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="#">Level 2</a>
</li>
</ul>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#">Item 2 Submenu</a>
<ul>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#section-3">Link 3</a>
</li>
<li><a href="#section-4">Link 4</a>
</li>
<li><a href="#section-5">Link 5</a>
</li>
</ul>
</nav>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
发布于 2015-05-21 04:50:16
从子ul元素中删除打开的类
$(document).ready(function() {
$("#nav li:has(ul) > a").click(function() {
var $ul = $(this).next("ul").toggleClass("show-subnav");
$ul.find('ul.show-subnav').removeClass('show-subnav');
$('#nav ul.show-subnav').not($ul.parentsUntil('#nav', 'ul').add($ul)).removeClass('show-subnav')
});
});#nav .show-subnav {
display: block;
}
#nav li > ul {
display: none;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Nav primary start -->
<nav id="nav">
<ul>
<li><a href="#">Item 1 Submenu</a>
<ul>
<li><a href="#">Level 1 Submenu</a>
<ul>
<li><a href="#">Level 2 </a>
</li>
<li><a href="">Level 2 </a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="#">Level 2</a>
</li>
</ul>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#">Item 2 Submenu</a>
<ul>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#section-3">Link 3</a>
</li>
<li><a href="#section-4">Link 4</a>
</li>
<li><a href="#section-5">Link 5</a>
</li>
</ul>
</nav>
发布于 2015-05-21 05:33:20
这里有一种方法。您还可以使用.children()方法而不是父方法。
$(document).ready(function() {
// Toggle Sub Nav
$("#nav li:has(ul)").children("ul").hide(); // hide the li UL
$("#nav li:has(ul)").find("a").click(function(e) {
// Add .show-subnav class to revele on click
var $clicked = $(this),
theClass = 'show-subnav';
$('.'+theClass).each(function(i,v) {//iterate all the opened uls
if (!$clicked.parents('.'+ theClass).length == 1) {//check if clicked element has a ul with the opened Css Class, and remove that class if condition fails
$(v).removeClass(theClass);
}
});
$(this).parent().find("ul:first").toggleClass(theClass);
// how to hide previously clicked submenus?
});
});#nav .show-subnav {
display: block!important;
}<!-- Nav primary start -->
<nav id="nav">
<ul>
<li><a href="#">Item 1 Submenu</a>
<ul>
<li><a href="#">Level 1 Submenu</a>
<ul>
<li><a href="#">Level 2 </a>
</li>
<li><a href="">Level 2 </a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="">Level 2</a>
</li>
<li><a href="#">Level 2</a>
</li>
</ul>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#">Item 2 Submenu</a>
<ul>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
<li><a href="#">Level 1 </a>
</li>
</ul>
</li>
<li><a href="#section-3">Link 3</a>
</li>
<li><a href="#section-4">Link 4</a>
</li>
<li><a href="#section-5">Link 5</a>
</li>
</ul>
</nav>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
https://stackoverflow.com/questions/30364774
复制相似问题