我有以下结构:
<div class="Downloadscontainer">
<ul>
<li>level 1</li>
<li><a href="#">level 1</a>
<ul>
<li>level 2</li>
<li>level 2</li>
<li><a href="#">some page</a>
<ul>
<li>level 2</li>
<li>level 2</li>
</ul>
</li>
</ul>
</li>
</ul>
我试图在点击其父li时显示ul,以下是我的jquery
$(document).ready(function () {
$(".Downloadscontainer ul li ul").css("display", "none");
$(".Downloadscontainer li").each(function () {
$(this).click(function () {
if ($(this).children('ul').length > 0) {
$('.Downloadscontainer li ul').toggle();
}
});
});
});
因此,如果我点击第1级LI
,则会显示UL
,然后如果我点击其中LI
的{{1}},那么它会关闭UL
级别1 UL
的{1}};我希望继续打开孩子LI
。我如何获得此功能?
答案 0 :(得分:8)
http://jsfiddle.net/TrueBlueAussie/ot0kxs0z/2/
$(".Downloadscontainer li").click(function (e) {
e.stopPropagation();
$(this).children('ul').toggle();
});
备注:
each
将处理程序附加到jQuery中的多个元素。@George
建议您最好不要附加锚点击。采用锚方法我会建议以下 DOM-change friendly :
http://jsfiddle.net/TrueBlueAussie/ot0kxs0z/5/
$(".Downloadscontainer a").click(function (e) {
e.preventDefault();
$(this).closest('li').children('ul').toggle();
});
注意:
LI
,然后向下钻取到UL
个孩子(而不是通过next
导航,这需要一个已知的安排。preventDefault
将停止滚动到页面顶部的空白书签链接(示例中为href="#"
)。如果它们是完整链接,则会阻止它们导航,因此如果您添加页面链接,则可能需要额外检查。例如,您可以检查链接是否为空白书签,并允许其他链接正常启动:
http://jsfiddle.net/TrueBlueAussie/ot0kxs0z/7/
$(".Downloadscontainer a").click(function (e) {
if ($(this).attr("href") == '#') {
e.preventDefault();
$(this).closest('li').children('ul').toggle();
}
});
此小提琴有一个指向Google的外部链接,以及#
链接。
答案 1 :(得分:3)
如何将事件处理程序附加到锚点?:
$(".Downloadscontainer li a").click(function (e) {
e.preventDefault();
$(this).next('ul').toggle();
});
.each()
循环不是许多jQuery方法,包括.click()
,.change()
,.keydown()
等事件处理绑定器方法的必要条件。答案 2 :(得分:0)
我试过这个并且它是成功的,你可以使用它
$(".main-menu li").click(function (e) {
e.stopPropagation();
$(this).children('ul').slideToggle().css("padding-left", "30px");
});
我添加了一些额外的填充物 - 留下每个孩子的ul,这样我们就可以理解/定义哪一个被扩展。