2012-06-13 3 views
3
<div id="main"> 
<div class="a"></div> 
<div class="b"><p>not me</p></div> 
<div class="b"></div> 
<div class="b"></div> 
<div class="c"></div> 
</div> 

Как мы можем написать селектор для выбора all divs with class b кроме которого ребенок <p>not me</p>?Выбор всех дивы, кроме одного

ответ

10
$('div.b:not(:has(p))')......... 

Или читаемый версия

$('div.b').filter(function(){ 
    return !$(this).find('p').length; 
}); 

Если вы хотите, чтобы соответствовать содержанию, а также:

$('div.b').filter(function(){ 
    return $(this).find('p').text() !== "not me"; 
}); 

Live DEMO

+0

Я думаю, что он должен '$ ('div.b: нет (: есть (р))''), но +1 .. – thecodeparadox

+0

Или на полпути между двумя опциями: '$ ('div.b'). Not (': has (p)')'. Что касается последнего варианта, я знаю, что разметка образца не имела этой проблемы, но что, если конкретный div имел более одного абзаца? – nnnnnn

+0

@nnnnnn. Я бы снова использовал фильтр ... – gdoron

3

демоhttp://jsfiddle.net/46nC5/1/

Поскольку вы специально ищете class b, вы сделали демоверсию для вас.

В этой демонстрации вы увидите, что я не уйду, отдых останется таким, какой он есть.

т.е. С :not + :has это может быть сделано

код

$('div.b:has(p)').​ 

или

$('div.b:not(:has(p))') 
0

А вот еще один

$("div.b:contains('not me')") 

редактировать: извините, вот с не

$("div.b:not(:contains('not me'))") 
+1

Это должно быть наоборот, не содержит ... – gdoron

1

Это даст вам два DIV которые имеют класс = "Ъ" и делает не имеют p (параграф)

Live Demo

$('div.b:not(:has(p))') 
1

Лучший способ я делать обычно работают на жидком:

$('div.b').filter(function() { 
    return !$(this).hasClass('notMe'); 
}); 


<div id="main"> 
    <div class="a"></div> 
    <div class="b notMe"><p>not me</p></div> 
    <div class="b"></div> 
    <div class="b"></div> 
    <div class="c"></div> 
</div> 
+1

Но вы изменили его HTML ... – gdoron

+0

да! Я пытался показать ему другие возможности – Bellash

Смежные вопросы