Frage jQuery Auswahl nach Attribut mit den Operatoren AND und OR


Ich denke darüber nach, ob es in jQuery möglich ist, Elemente durch benannte Attribute mit UND und ODER auszuwählen.

Beispiel:

<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>

Ich möchte alle Elemente wo auswählen myc="blue" aber nur diejenigen mit myid Stellen Sie entweder 1 oder 3 ein.

Also habe ich es versucht:

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

aber es funktioniert nicht, das gleiche hier:

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

Ist es möglich ohne spezielle Filterfunktionen zu schreiben?


76
2018-05-21 14:25


Ursprung


Antworten:


UND Betrieb

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

ODER Operation, Komma verwenden

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

Wie @Vega kommentierte:

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

145
2018-05-21 14:27



Einfache Verwendung .filter()  [Dokumente] (UND) mit der Mehrfachauswahl  [Dokumente] (ODER):

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

In der Regel verketten Selektoren, wie a.foo.bar[attr=value] ist eine Art UND-Selektor.

jQuery hat umfangreiche Dokumentation Über die unterstützten Selektoren ist es eine Lektüre wert.


14
2018-05-21 14:31



Wie wäre es mit einem Filter wie unten,

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

Bearbeiten: @Jack Danke .. total verpasst es ..

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

DEMO


10
2018-05-21 14:27



Der Operator und in einem Selektor ist nur eine leere Zeichenfolge und der Operator oder ist das Komma.

Es gibt jedoch keine Gruppierung oder Priorität, daher müssen Sie eine der folgenden Bedingungen wiederholen:

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

5
2018-05-21 14:29



Finden Sie zuerst die Bedingung, die in allen Situationen auftritt, und filtern Sie dann die speziellen Bedingungen:

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

5
2018-05-21 14:33



In Ihrem speziellen Fall wäre es

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

1
2018-05-21 14:30



JQuery verwendet CSS-Selektoren, um Elemente auszuwählen. Sie müssen also nur mehr als eine Regel verwenden, indem Sie sie durch Kommas trennen:

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

Bearbeiten:

Entschuldigung, du wolltest blau und 1 oder 3. Wie wäre es mit:

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

Wenn Sie die beiden Attributselektoren zusammenfügen, erhalten Sie UND, und mit einem Komma erhalten Sie ODER.


-1
2018-05-21 14:27



Um die Elemente mit den von Ihnen angegebenen logischen Operationen richtig auszuwählen, brauchen Sie nur jQuery.filter() für die AND Operation, nicht "spezielle Filterfunktionen". Du brauchst ausserdem jQuery.add() für die OR Betrieb.

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

Alternativ ist es möglich, die Verwendung von Kurzschreibweisen in einem einzigen Selektor zu erreichen, wobei die Stauswähler zusammen wirken AND und Trennen mit einem Komma wirkt wie ein OR:

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

-1
2018-05-21 14:28