使用元素子类的条件使用jquery选择元素

时间:2015-06-26 11:10:26

标签: jquery

我有一个像这样的人:

<div class=main>
    <div class="child"></div>
</div>
<div class=main>
    <div class="child b"></div> 
</div>
<div class=main>
    <div class="child"></div>
</div>
<div class=main>
    <div class="child b"></div>
</div>

我想选择感谢jquery所有主要的div元素,它有一个没有类“b”的孩子。所以我会得到第一个和第三个元素。 这就是我所做的,它不起作用,它返回了我所有的元素:

$(".main").not(".b")

我也尝试了这个,但它抛出了一个例外“无效令牌”:

$(".main").not(":.b")

提前感谢您的帮助

7 个答案:

答案 0 :(得分:3)

您需要使用合并:not:has选择器:

$('.main:not(:has(".b"))');

或找到没有类b的子元素,然后使用.parent()选择器遍历这些元素parent:

$('.child:not(".b")').parent()

答案 1 :(得分:1)

CSS选择器无法提升。你不能拥有孩子的父母。因此,您只能使用一个选择器来执行此操作。但你可以这样做:

var elements = $('.main').filter(function() {
    return !$(this).children('.b');
});

答案 2 :(得分:1)

由Milind Anantwar发布的

$('.main:not(:has(".b"))')或您可以使用:

$('.child:not(.b)').closest('.main');

答案 3 :(得分:0)

$('.main').find('[class=child]') - 这将给出只有子类的两个元素。

$('.main').find('[class^=child]') - 这将返回所有4个子类元素

答案 4 :(得分:0)

你也可以尝试这样:

$(".main").children().not(".b");

由于“child”类元素是“main”类元素的子元素,因此不能直接使用$(".main").not(".b"); - 这将在父级别进行检查。

答案 5 :(得分:0)

映射那些精确的说明。

$('.main').map(function(){ if ($(this).find('div').not('.child.b').length > 0) return this; });

答案 6 :(得分:-1)

你不能像这样直接使用。 您可以使用$ .each()循环

获得所需的输出
 $.each($("div .main"),function(){
     if(this).not(".b")
     {
        return this;
     }
 });