在Jquery中选择All除Parent之外的所有内容

时间:2012-04-24 01:39:48

标签: jquery

我有以下代码:

<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标签。 解决办法是什么?我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

这个看起来很挑剔的选择器应该可以工作:

$("ul :not(:has(#ThisClick))").hide();

参考文献::not():has()


所以,这段代码会使你所点击的元素不是父元素的所有元素都隐藏起来。根据需要更改第一个选择器($("#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>