Vraag jQuery selecteren op attribuut met behulp van AND- en OR-operators


Ik denk erover na, als het mogelijk is in jQuery om elementen te selecteren op benoemde attributen met behulp van AND en OF.

Voorbeeld:

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

Ik wil graag alle elementen selecteren waar myc="blue" maar alleen die met myid ingesteld op 1 of 3.

Dus ik probeerde het:

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

maar het werkt niet, hetzelfde hier:

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

Is het mogelijk zonder speciale filterfuncties te schrijven?


76
2018-05-21 14:25


oorsprong


antwoorden:


EN operatie

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

OF gebruik, gebruik komma's

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

Zoals @Vega zei:

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

145
2018-05-21 14:27



Eenvoudig gebruik .filter()  [Documenten] (EN) met behulp van de meerdere selector  [Documenten] (OF):

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

In het algemeen, keten selectors, zoals a.foo.bar[attr=value] is een soort van EN-selector.

jQuery heeft uitgebreide documentatie over de ondersteunde selectors, het is het lezen waard.


14
2018-05-21 14:31



Wat dacht je van het schrijven van een filter zoals hieronder,

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

Bewerk: @Jack Bedankt .. helemaal gemist het ..

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

DEMO


10
2018-05-21 14:27



De en -operator in een selector is slechts een lege tekenreeks en de of-operator is de komma.

Er is echter geen groep of prioriteit, dus je moet een van de voorwaarden herhalen:

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

5
2018-05-21 14:29



Zoek eerst de toestand die zich in alle situaties voordoet en filter vervolgens de speciale voorwaarden:

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

5
2018-05-21 14:33



In jouw speciale geval zou dat zo zijn

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

1
2018-05-21 14:30



JQuery gebruikt CSS-selectors om elementen te selecteren, dus je hoeft alleen maar meer dan één regel te gebruiken door ze te scheiden met komma's, zoals:

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

Bewerk:

Sorry, je wilde blauw en 1 of 3. Wat dacht je van:

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

Als u de twee attribuutselectoren bij elkaar plaatst, krijgt u AND, en met een komma krijgt u OF.


-1
2018-05-21 14:27



Om de elementen juist te selecteren met behulp van de logische bewerkingen die u hebt aangegeven, hoeft u alleen maar te doen jQuery.filter() voor de AND werking, niet "speciale filterfuncties". Je hebt ook nodig jQuery.add() voor de OR operatie.

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

Als alternatief is het mogelijk om met behulp van een steno in een enkele selector te werken, waarbij de stoorkiezers samen als een fungeren AND en scheiden met een komma fungeert als een OR:

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

-1
2018-05-21 14:28