jQuery pilih berdasarkan atribut menggunakan operator AND dan OR


105

Saya sedang memikirkan, 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 yang memiliki myidset ke 1 atau 3.

Jadi saya mencoba:

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

tapi tidak berhasil, sama di sini:

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

Apakah mungkin tanpa menulis fungsi filter khusus?


7
NB: Anda tidak boleh membuat atribut seperti mycdan myid. Jika Anda menggunakan awalan HTML5 dengan data-: data-mycdan data-myid.
— RoToRa

@RoToRa, apakah ada dokumentasi dalam HTML5 yang mengatakan bahwa Anda harus melakukannya? Sebagian besar situs web yang saya lihat menggunakan apa pun yang dipikirkan otak pengembang saat itu ...
— Alexis Wilke

1
Hanya karena orang melakukannya, bukan berarti itu benar. Lihat HTML5 Bagian 3.2.1 : "Penulis tidak boleh menggunakan elemen, atribut, atau nilai atribut yang tidak diizinkan oleh spesifikasi ini atau spesifikasi lain yang berlaku, karena hal itu akan mempersulit pengembangan bahasa di masa mendatang."
— RoToRa

1
Ini adalah contoh yang buruk dari pertanyaan yang bagus. Bagaimana dengan tipe elemen yang berbeda seperti input?
— yesus g_force Harris

Jawaban:


193

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"]');

1
Saya pikir, dia menginginkanmyc == blue && (id == 1 || id == 3)
— Selvakumar Arumugam

2
jika saya menggunakan a=$('[myc="blue"] [myid="1"],[myid="3"]');artinya ([myc="blue"] AND [myid="1"]) OR [myid="3"]atau ([myc="blue"]) AND ([myid="1"] OR [myid="3"]) saya mencari yang kedua // Edit: terima kasih untuk pembaruan itu! :-)
— The Bndr


10

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

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

DEMO


5

Operator and dalam selektor hanyalah string kosong, dan operator or berupa koma.

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

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

apakah Anda membutuhkan kutipan itu? Maksud saya hanya untuk konsistensi .. mungkin hanya saya. >. <
— Selvakumar Arumugam

1
@Vega: Anda tidak memerlukan tanda kutip untuk string sederhana seperti blue, tetapi saya tidak yakin tentang nilai numerik, jadi saya menyimpannya.
— Guffa

5

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

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

1

Dalam kasus khusus Anda, itu akan terjadi

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

0

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

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

Edit:

Maaf, Anda mau biru dan 1 atau 3. Bagaimana kalau:

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

Menyatukan dua selektor atribut memberi Anda DAN, menggunakan koma memberi Anda ATAU.


1
Saya pikir, dia menginginkanmyc == blue && (id == 1 || id == 3)
— Selvakumar Arumugam

Anda perlu mengulang [myc="blue"]selektor pada contoh kedua.
— RoToRa

-1

Untuk benar memilih elemen menggunakan operasi logis bahwa Anda telah menyatakan, Anda hanya perlu jQuery.filter()untuk ANDoperasi, bukan "fungsi filter khusus". Anda juga perlu jQuery.add()untuk ORoperasi tersebut.

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

Atau, dimungkinkan untuk menggunakan singkatan dalam satu selektor, di mana selektor jamming bersama-sama bertindak sebagai ANDdan memisahkan dengan koma bertindak sebagai OR:

var elements = $('[myc="blue"][myid="1"], [myid="3"]');
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.