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?
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"]');
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.
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');
});
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"]');
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"]');
Dans votre cas particulier, ce serait
a=$('[myc="blue"][myid="1"],[myc="blue"][myid="3"]');
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.