72 votes

Quel sélecteur JQuery exclut les éléments dont le parent correspond à un sélecteur donné?

j'ai

 var $set = $('.foo,.bar').filter(
    function() {return $(this).parents('.baz').length < 1;});
 

comme moyen de sélectionner tous les éléments dont les classes sont foo ou bar et qui ne descendent pas d’un élément dont la classe est baz . Existe-t-il un sélecteur qui accomplira la même chose sans qu'un filtre lambda soit nécessaire?

 <div class='foo'/><!--match this-->
<div class='bar'/><!--match this-->
<div class='baz'>
    <div class='foo'/> <!--don't match this-->
</div>
 

80voto

Paolo Bergantino Points 199336

La vérité de la question est que jQuery simplement ne ont pas un particulier de manière élégante de faire ce que vous voulez. Alors que le chaos " réponse ne le travail, vous avez à se demander si la complexité de sélecteur (qui serait de l'ordre comme lent comme un sélecteur peut être compliqué page web) est peine plus le plus détaillé mais plus rapide fonction de filtre que vous avez. Ce n'est pas vraiment que grand d'une affaire, je suis personnellement las de particulièrement long, tortueux sélecteurs quand je peux l'éviter.

Une autre option est de créer votre propre sélecteur, depuis jQuery est génial:

jQuery.expr[':'].parents = function(a,i,m){
    return jQuery(a).parents(m[3]).length < 1;
};

$('.foo,.bar').filter(':parents(.baz)');

Testé et fonctionne.

31voto

chaos Points 69029
$('.foo:not(.baz .foo),.bar:not(.baz .bar)')

18voto

xiaohouzi79 Points 3165

Je ne pouvais pas faire fonctionner ça:

 $(".children:not(#parent .children)");
 

Mais je peux obtenir que cela fonctionne:

 $(".children").not($("#parent .children"));
 

Remarque: Je ne suis pas sûr que cela ait quelque chose à voir avec la version de jQuery que j'utilise en version 1.2.6.

1voto

BengtBe Points 3167

Le sélecteur de chaos donne devrait fonctionner:

$('.foo:not(.baz .foo),.bar:not(.baz .bar)')

Voulais juste vous donner un conseil sur une extension FireBug appelé FireFinder que vous pouvez utiliser pour tester votre css/sélecteurs jquery.

À partir du site web: Firefinder est une extension Firebug (dans Firefox) et offre la fonctionnalité, de manière rapide, de trouver des éléments HTML correspondant choisi sélecteur CSS(s) ou expression XPath. Il vous permet de tester instantanément vos sélecteurs CSS dans la page au moment de voir le contenu dans le même temps, et les éléments correspondants seront mis en évidence.

0voto

Dave Ward Points 36006

Ajoutez a: not ('. Baz') à votre sélecteur de niveau supérieur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X