jQuery选择器所有不在子类中的元素

时间:2012-10-09 08:47:59

标签: jquery jquery-selectors

鉴于页面上某处的HTML(可能不同):

<div id="start">
<div>
    <div class="buttons">select this</div>
    <div class="myControl">
        <div class="buttons">dont select this</div>
    </div>
    <div>
        <div class="buttons">select this</div>
    </div>
</div>
</div>​

我想用类buttons红色标记所有元素:

$('#start').find('.buttons').css('color','red');​

如果它们在myControl内,那么只有“选择此”div应为红色。

在伪代码中,选择器将是

  

使用类“按钮”获取每个元素,但忽略所有内容   在“myControl”类的元素中

我准备了 jsfiddle here


修改

我不知道启动div也可以拥有“myControl”类(试图尽可能地从我的项目中删除代码以使其可读),所以实际上它看起来像这样(并且完整的块也可以与myControl嵌套在更多的div中)。

所以不幸的是(对我原来的问题是正确的)答案在那种情况下不起作用,对不起!知道如何调整其中一个答案来解决这个问题吗?

<div class="myControl" id="start">
<div>
    <div class="buttons">select this</div>
    <div class="myControl">
        <div class="buttons">dont select this</div>
    </div>
    <div>
        <div class="buttons">select this</div>
    </div>
</div>
</div>​

new jsfiddle here


所以最终的解决方案是:

$('#start').find('.buttons:not("#start div.myControl div.buttons ")')
.css('color','red');​

3 个答案:

答案 0 :(得分:7)

你可以使用.not

 $('#start').find('.buttons:not("div.myControl > div.buttons ")').css('color','red');​

的jsfiddle

http://jsfiddle.net/QqRuV/3/

答案 1 :(得分:2)

$('#start').find('.buttons').filter(function(e) { return $(this).parent(".myControl").length < 1; }).css('color','red');​

答案 2 :(得分:0)

$('#start').children('.buttons').css('color', 'red')