Pertanyaan jQuery pilih berdasarkan atribut menggunakan operator AND dan OR


Saya berpikir tentang, apakah mungkin di jQuery untuk memilih elemen dengan atribut bernama menggunakan AND dan OR.

Contoh:

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

Saya ingin memilih semua elemen di mana myc="blue" tetapi hanya dengan mereka myid diatur ke 1 atau 3.

Jadi saya mencoba:

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

tetapi tidak berfungsi, sama di sini:

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

Apakah mungkin tanpa menulis fungsi filter khusus?


76
2018-05-21 14:25


asal


Jawaban:


DAN operasi

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

ATAU operasi, gunakan koma

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

Seperti komentar @Vega:

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

145
2018-05-21 14:27



Penggunaan sederhana .filter()  [dokumen] (AND) menggunakan beberapa pemilih  [dokumen] (ATAU):

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

Secara umum, pemilih berantai, seperti a.foo.bar[attr=value] adalah semacam DAN pemilih.

jQuery memiliki dokumentasi ekstensif tentang pemilih yang didukung, itu layak dibaca.


14
2018-05-21 14:31



Bagaimana kalau menulis filter seperti di bawah ini,

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

Edit: @Jack Terima kasih .. benar-benar merindukannya ..

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

DEMO


10
2018-05-21 14:27



Operator dan dalam pemilih hanya string kosong, dan atau operator adalah koma.

Namun tidak ada pengelompokan atau prioritas, jadi Anda harus mengulangi salah satu ketentuan:

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

5
2018-05-21 14:29



Pertama temukan kondisi yang terjadi di semua situasi, kemudian filter kondisi khusus:

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

5
2018-05-21 14:33



Dalam kasus spesialmu itu

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

1
2018-05-21 14:30



JQuery menggunakan pemilih CSS untuk memilih elemen, jadi Anda hanya perlu menggunakan lebih dari satu aturan dengan memisahkannya dengan koma, karena:

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

Edit:

Maaf, Anda menginginkan warna biru dan 1 atau 3. Bagaimana dengan:

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

Menempatkan dua pemilih atribut bersama memberi Anda DAN, menggunakan koma memberi Anda ATAU.


-1
2018-05-21 14:27



Untuk memilih elemen dengan benar menggunakan operasi logis yang telah Anda nyatakan, Anda hanya perlu jQuery.filter() Untuk AND operasi, bukan "fungsi filter khusus". Kamu juga membutuhkan jQuery.add() Untuk OR operasi.

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

Alternatifnya, adalah mungkin untuk mencapai menggunakan singkatan dalam selektor tunggal, di mana selektor jamming bersama bertindak sebagai AND dan memisahkan dengan koma bertindak sebagai OR:

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

-1
2018-05-21 14:28