进行查询,但忽略给定元素的子元素,即使它们匹配

时间:2013-05-24 09:58:22

标签: jquery jquery-selectors

我有这个HTML:

<div id="container1">

    <div id="container3">
        <div class="item"></div>
        <div class="item2"></div>
    </div>

    <div class="item"></div>
    <div class="item2"></div>

    <div id="container2">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item2"></div>
    </div>

<div>

使用jQuery,是否有一种(简单)方法可以使用.item搜索div,但屏蔽#container2内的所有结果?

理想情况下,我喜欢$(#container1).mask('container2').find('.item')之类的内容,即您可以在任何其他查询中使用的透明解决方案,而不知道您正在使用它。例如:

// where queryExcludingContainer2 could be `$(#container1).mask('container2')` if the `mask` function existed
queryExcludingContainer2.find('.item')
queryExcludingContainer2.find('.item2')

是否有这样的“屏蔽”功能?

5 个答案:

答案 0 :(得分:2)

你的意思是这样的?

jsFiddle example

$('div').not('#container2').children('.item')

了解更多信息: not()

jQuery API Documentation

答案 1 :(得分:1)

我认为您需要使用children()

示例JS Fiddle

$("#container1").children(".item").css('font-style', 'italic');

答案 2 :(得分:1)

您可以使用“:not”选择器 http://api.jquery.com/not-selector/

$('.item:not(#container2 *)')

答案 3 :(得分:0)

我想,您可以像这样使用space-bar

$('#container1 .item')

并且,如果.item元素直接位于#container1之下,您也可以使用它:

$('#container1 > .item')

答案 4 :(得分:0)

我认为你可以使用filter()