2010-01-28 12 views
2
<div> 
    <p><a href="#">link</a> some text</p> 
    <p><a href="#">link</a></p> 
    <p><a href="#">link</a> some text</p> 
    <p><a href="#">link</a></p> 
</div> 

Je veux trouver (et addClass à) les <p> balises qui ne contiennent pas de texte, directement à l'intérieur lui-même ou ses enfants.Trouver si l'élément contient x, mais pas y (jQuery)

+0

Le sélecteur que vous décrivez ne sélectionnerait aucun des paragraphes ci-dessus, n'est-ce pas? – Lazarus

+0

Il sélectionne ceux avec le lien seulement et PAS ceux qui contiennent "un peu de texte" – 3zzy

+3

Mais les enfants contiennent du texte et vous avez explicitement dit "tags qui ne contiennent pas de texte, directement à l'intérieur de lui-même ou ses enfants." – Lazarus

Répondre

4

Cela fonctionne bien, je ne dois vider le texte de l'un de vos paragraphes à tester:

var $eles = $('p').filter(function() { 
    return $(this).text().length == 0; 
}); 
$eles.addClass("foo"); 
+0

a bien fonctionné, merci beaucoup! :) – 3zzy

0

Je suppose que vous avez une erreur dans la description du problème, comme la balise contient toujours du texte dans l'exemple.

Pour autant que je sais qu'il n'y a pas de sélecteur standard permettant de vérifier s'il y a un contenu direct, mais vous pouvez essayer ceci:

$('p').each(function(){ 
var p = $(this).clone(); 
p.children().remove(); 
if(p.text().length){ 
    $(this).addClass('gotcha'); 
    } 
}); 

devrait fonctionner si vous souhaitez vérifier que l'intérieur de paragraphe.