我希望建立一个多层次的手风琴菜单。 到目前为止,我已经构建了这个菜单(http://codepen.io/anon/pen/ogdovx),但我是jquery的新手,并且用它来达到我的知识极限。
如何改进? 我需要它只下载具有子UL的项目并打开兄弟姐妹/孩子。
任何有关改进我的代码的帮助都将不胜感激。 干杯!
codepen的代码:
$(document).ready(function() {
$(".main > li > a").click(function() {
$('.main ul').slideUp();
if (!$(this).next().is(":visible")) {
$(this).next().slideDown();
}
})
$(".main > li > ul > li > a").click(function() {
$('.main ul ul').slideUp();
if (!$(this).next().is(":visible")) {
$(this).next().slideDown();
}
})
$(".main ul ul li > a").click(function() {
$('.main ul ul ul').slideUp();
if (!$(this).next().is(":visible")) {
$(this).next().slideDown();
}
})
});
ul.children {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="main">
<li class="page_has_children">
<a href="#">Link</a>
<ul class="children">
<li class="page_has_children">
<a href="#">Sub Link</a>
<ul class="children">
<li>
<a href="#">Sub Sub Link</a>
<ul class="children">
<li><a href="#">Child Link</a>
</li>
<li><a href="#">Child Link</a>
</li>
<li><a href="#">Child Link</a>
</li>
</ul>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
</ul>
答案 0 :(得分:0)
最明显的改进方法是创建一些句柄,这样您就不必复制代码了。最简单的方法是在任何父链接上放置一个类。通过这样做,您只需要调用添加事件处理程序。
$(".parent-link").click(function() {
var children = $(this).next(); //shorthand for the next ul
var parents = $(this).parents(".children"); //any uls above me
//close all other uls not above me in the tree
$('.children').not(parents).slideUp();
//open this if its closed
children.filter(":hidden").slideDown();
})
&#13;
ul.children {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="main">
<li class=".parent-link">
<a class="parent-link" href="#">Link</a>
<ul class="children">
<li class="page_has_children">
<a class="parent-link" href="#">Sub Link</a>
<ul class="children">
<li>
<a class="parent-link" href="#">Sub Sub Link</a>
<ul class="children">
<li><a href="#">Child Link</a>
</li>
<li><a href="#">Child Link</a>
</li>
<li><a href="#">Child Link</a>
</li>
</ul>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a class="parent-link" href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a class="parent-link" href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a class="parent-link" href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
<li class="page_has_children">
<a class="parent-link" href="#">Link</a>
<ul class="children">
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
<li><a href="#">Sub Link</a>
</li>
</ul>
</li>
</ul>
&#13;