Je pense à, 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>
Je voudrais sélectionner tous les éléments où, myc="blue"
mais uniquement ceux dont la valeur myid
est 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-ce possible sans écrire des fonctions de filtrage spéciales?
jquery
jquery-selectors
find
operators
Le Bndr
la source
la source
myc
etmyid
. Si vous utilisez HTML5, préfixez-les avecdata-
:data-myc
etdata-myid
.Réponses:
ET opération
Opération OR , utilisez des virgules
Comme l'a commenté @Vega:
la source
myc == blue && (id == 1 || id == 3)
a=$('[myc="blue"] [myid="1"],[myid="3"]');
ça veut dire([myc="blue"] AND [myid="1"]) OR [myid="3"]
ou([myc="blue"]) AND ([myid="1"] OR [myid="3"])
je cherche le 2ème // Edit: merci pour cette mise à jour! :-)Utilisation simple
.filter()
[docs] (AND) en utilisant le sélecteur multiple [docs] (OR):En général, les sélecteurs de chaînage, comme
a.foo.bar[attr=value]
une sorte de sélecteur AND.jQuery a une documentation complète sur les sélecteurs pris en charge, cela vaut la peine d'être lu.
la source
Que diriez-vous d'écrire un filtre comme ci-dessous,
Edit: @Jack Merci ... totalement manqué ..
DEMO
la source
L'opérateur and 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 regroupement ni de priorité, vous devez donc répéter l'une des conditions:
la source
blue
, mais je n'étais pas sûr des valeurs numériques, alors je les ai gardées.Recherchez d'abord la condition qui se produit dans toutes les situations, puis filtrez les conditions spéciales:
la source
Dans votre cas particulier, ce serait
la source
JQuery utilise des sélecteurs CSS pour sélectionner des éléments, il vous suffit donc d'utiliser plus d'une règle en les séparant par des virgules, comme suit:
Éditer:
Désolé, vous vouliez du bleu et 1 ou 3. Que diriez-vous:
L'association des deux sélecteurs d'attributs vous donne ET, l'utilisation d'une virgule vous donne OU.
la source
myc == blue && (id == 1 || id == 3)
[myc="blue"]
sélecteur dans le deuxième exemple.Pour sélectionner correctement les éléments en utilisant les opérations logiques que vous avez indiquées, vous n'avez besoin que
jQuery.filter()
de l'AND
opération, pas de "fonctions de filtrage spéciales". Vous avez également besoinjQuery.add()
pour l'OR
opération.Alternativement, il est possible d'accomplir l'utilisation de la sténographie dans un seul sélecteur, où les sélecteurs de brouillage agissent ensemble comme un
AND
et la séparation avec une virgule agit comme unOR
:la source