2012-06-13 2 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> 

Comment nous pouvons écrire un sélecteur pour sélectionner all divs with class b sauf dont l'enfant est <p>not me</p>?Sélection de tous les divs sauf un

Répondre

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

Ou la version lisible

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

Si vous voulez correspondre au contenu ainsi:

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

Live DEMO

+0

Je pense qu'il devrait '$ ('div.b: non (: a (p))''), mais +1 .. – thecodeparadox

+0

Ou à mi-chemin entre les deux options: '$ ('div.b'). Not (': a (p)')'. En ce qui concerne la dernière option, je sais que le balisage d'échantillon n'a pas eu ce problème mais que se passe-t-il si un div particulier a plus d'un paragraphe? – nnnnnn

+0

@nnnnnn. J'utiliserais encore 'filter' ... – gdoron

3

Démohttp://jsfiddle.net/46nC5/1/

Depuis que vous recherchez spécifiquement class b fait une démo pour vous donc le partage.

Dans cette démo, vous verrez que je ne me fane pas, le reste restera tel quel.

dire avec :not + :has il peut être fait

Code

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

ou

$('div.b:not(:has(p))') 
1
$('div.b').filter(function() { 
    return $(this).find('p:contains(not me)').length == 0; 
}) 

jsFiddle Demo

0

Et voici un

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

modifier une autre: désolé, voici avec pas

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

Il devrait être l'inverse ne containes pas ... – gdoron

1

Cela vous donnera deux div qui ont class = "b" et -t pas p (paragraphe)

Live Demo

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

La meilleure façon de faire usualy:

$('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

Mais vous avez changé son HTML ... – gdoron

+0

ouais! J'essayais de lui montrer d'autres possibilités – Bellash

Questions connexes