web-dev-qa-db-fra.com

jQuery select par attribut en utilisant AND et OR les opérateurs

J'y réfléchis, s'il est possible dans jQuery de sélectionner des éléments par des attributs nommés en utilisant AND et OR.

Exemple:

<div myid="1" myc="blue">1</div>
<div myid="2" myc="blue">2</div>
<div myid="3" myc="blue">3</div>
<div myid="4">4</div>

J'aimerais sélectionner tous les éléments où myc="blue" mais uniquement ceux dont myid est défini sur 1 ou 3.

Alors j'ai essayé:

a=$('[myc="blue"] [myid="1"]  [myid="3"]');

mais ça ne marche pas, pareil ici:

a=$('[myc="blue"] && [myid="1"] || [myid="3"]');

Est-il possible sans écrire des fonctions de filtrage spéciales?

83
The Bndr

ETopération

a=$('[myc="blue"][myid="1"][myid="3"]');

OUopération, utilisez des virgules

a=$('[myc="blue"],[myid="1"],[myid="3"]');

Comme @Vega a commenté:

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
156
Gabe

Utilisation simple .filter()[docs] (AND) en utilisant le sélecteur multiple [docs] (OU):

$('[myc="blue"]').filter('[myid="1"],[myid="2"]');

En général, les sélecteurs de chaîne, comme a.foo.bar[attr=value], sont une sorte de sélecteur AND.

jQuery a une documentation complète sur les sélecteurs supportés, ça vaut le coup d'être lu.

15
Felix Kling

Que diriez-vous d'écrire un filtre comme ci-dessous,

$('[myc="blue"]').filter(function () {
   return (this.id == '1' || this.id == '3');
});

Edit: @Jack Merci .. totalement loupé .. 

$('[myc="blue"]').filter(function() {
   var myId = $(this).attr('myid');   
   return (myId == '1' || myId == '3');
});

D&EACUTE;MO

10

Recherchez d'abord la condition qui se produit dans toutes les situations, puis filtrez les conditions spéciales:

$('[myc="blue"]')
    .filter('[myid="1"],[myid="3"]');
5
Ja͢ck

L'opérateur et dans un sélecteur est juste une chaîne vide, et l'opérateur ou est la virgule.

Il n'y a cependant pas de groupement ni de priorité, vous devez donc répéter l'une des conditions suivantes:

a=$('[myc=blue][myid="1"],[myc=blue][myid="3"]');
5
Guffa

Dans votre cas particulier, ce serait 

a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
1
Paul

JQuery utilise des sélecteurs CSS pour sélectionner des éléments. Vous devez donc utiliser plusieurs règles en les séparant par des virgules, comme suit:

a=$('[myc="blue"], [myid="1"], [myid="3"]');

Modifier:

Désolé, tu voulais bleu et 1 ou 3. Que diriez-vous de:

a=$('[myc="blue"][myid="1"],  [myid="3"]');

Rassembler les deux sélecteurs d'attributs vous donne ET, utiliser une virgule pour OU.

0
philnash