我有以下代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$("#ThisClick").anycommand();
</script>
</head>
<body>
<ul id="TopUl">
<li>First<ul>
<li>One<ul>
<li>liA1</li>
<li>liA2</li>
</ul>
</li>
<li>Two<ul>
<li id="ThisClick">liB1</li>
<li>liB2</li>
</ul>
</li>
</ul>
</li>
<li>Second<ul>
<li>li1<ul>
<li>liF1</li>
<li>liF2</li>
</ul>
</li>
<li>li2</li>
</ul>
</li>
</ul>
</body>
</html>
点击时,我需要折叠所有不属于liB1(#ThisClick)父母的UL。 换句话说,点击liB1我想要下面的代码:
<ul id="TopUl">
<li>First<ul>
<li>One<ul style="display:none">
<li>liA1</li>
<li>liA2</li>
</ul>
</li>
<li>Two<ul>
<li id="ThisClick">liB1</li>
<li>liB2</li>
</ul>
</li>
</ul>
</li>
<li>Second<ul style="display:none">
<li>li1<ul style="display:none">
<li>liF1</li>
<li>liF2</li>
</ul>
</li>
<li>li2</li>
</ul>
</li>
</ul>
然后Jquery可能会崩溃所有没有父级的UL标签。 解决办法是什么?我该怎么办呢?
答案 0 :(得分:1)
这个看起来很挑剔的选择器应该可以工作:
$("ul :not(:has(#ThisClick))").hide();
所以,这段代码会使你所点击的元素不是父元素的所有元素都隐藏起来。根据需要更改第一个选择器($("#ThisClick")
),此时它仅适用于您已指定<li>
ID的ThisClick
,并且您只能使用一次ID。< / p>
$("#ThisClick").click(function() {
$("ul :not(:has(this))").hide();
});
要在<li>
中的所有 <ul>
上执行此操作,您可以执行以下操作:
$("#TopUl li").click(function() {
$("ul :not(:has(this))").hide();
});
这会将点击事件添加到列表中的所有<li>
。