我有一个包含许多父菜单和子菜单项的菜单栏:
<nav>
<ul>
<li class="menu-item-has-children">
<a href="#">Parent item</a>
<ul>
<li><a href="#">Child item</a></li>
<li><a href="#">Child item</a></li>
</ul>
</li>
<li class="menu-item-has-children">
<a href="#">Parent item</a>
<ul>
<li><a href="#">Child item</a></li>
<li><a href="#">Child item</a></li>
</ul>
</li>
</ul>
</nav>
默认隐藏子子菜单:
.menu-item-has-children > ul {
display: none;
}
我想实现以下目标:
我正在使用以下代码,但它没有显示正确的子菜单,而是显示/隐藏所有子菜单:
$(document).on('click', function(e) {
if($(e.target).parent().hasClass('menu-item-has-children')) {
$(this).find('ul').show();
} else {
$('.menu-item-has-children > ul').toggle();
}
});
请参阅小提琴:https://jsfiddle.net/gs9q6kwh/
知道我做错了吗?
答案 0 :(得分:1)
这可以通过先隐藏所有子菜单,然后只显示被点击父级的兄弟子菜单来轻松实现:
$(document).on('click', function(e) {
$('.menu-item-has-children > ul').hide();
if ($(e.target).parent().hasClass('menu-item-has-children')) {
$(e.target).siblings('ul').toggle();
}
});
&#13;
.menu-item-has-children>ul {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
<ul>
<li class="menu-item-has-children">
<a href="#">Parent item</a>
<ul>
<li><a href="#">Child item</a></li>
<li><a href="#">Child item</a></li>
</ul>
</li>
<li class="menu-item-has-children">
<a href="#">Parent item</a>
<ul>
<li><a href="#">Child item</a></li>
<li><a href="#">Child item</a></li>
</ul>
</li>
</ul>
</nav>
&#13;
答案 1 :(得分:0)
jQuery代码存在一些问题: