jQuery seleziona per attributo utilizzando gli operatori AND e OR

Ci sto pensando, se è ansible in jQuery selezionare gli elementi per attributi denominati usando AND e OR.

Esempio:

1
2
3
4

Mi piacerebbe selezionare tutti gli elementi in cui myc="blue" ma solo quelli con myid impostato su 1 o 3.

Così ho provato:

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

ma non funziona, lo stesso qui:

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

È ansible senza scrivere speciali funzioni di filtro?

E operazione

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

OPPURE operazione, utilizzare le virgole

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

Come @Vega ha commentato:

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

Semplice uso .filter() [docs] (AND) utilizzando il selettore multiplo [docs] (OR):

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

In generale, i selettori di concatenamento, come a.foo.bar[attr=value] è una specie di selettore AND.

jQuery ha una vasta documentazione sui selettori supportati, vale la pena leggere.

Che ne dici di scrivere un filtro come di seguito,

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

Modifica: @Jack Grazie .. totalmente perso ..

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

DEMO

L’operatore e in un selettore è solo una stringa vuota e l’operatore o è la virgola.

Non c’è tuttavia alcun raggruppamento o priorità, quindi è necessario ripetere una delle condizioni:

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

Prima trova la condizione che si verifica in tutte le situazioni, quindi filtra le condizioni speciali:

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

Nel tuo caso speciale sarebbe

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

JQuery utilizza i selettori CSS per selezionare gli elementi, quindi è sufficiente utilizzare più di una regola separandoli con virgole, in questo modo:

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

Modificare:

Scusa, volevi blu e 1 o 3. Che ne dici di:

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

Mettendo insieme i due selettori di attributo si ottiene AND, utilizzando una virgola si ottiene OR.

Per selezionare correttamente gli elementi utilizzando le operazioni logiche che hai indicato, devi solo jQuery.filter() per l’operazione AND , non “funzioni filtro speciali”. È necessario anche jQuery.add() per l’operazione OR .

 var elements = $('[myc="blue"]').filter('[myid="1"').add('[myid="3"'); 

In alternativa, è ansible eseguire utilizzando la stenografia in un singolo selettore, in cui i selettori di disturbo agiscono insieme come un AND e separandoli con una virgola agisce come un OR :

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