Saya bertanya-tanya apakah ada cara untuk memiliki "OR" logika di pemilih jQuery. Sebagai contoh, saya tahu elemen adalah turunan dari elemen dengan class classA atau classB, dan saya ingin melakukan sesuatu seperti elem.parents('.classA or .classB')
. Apakah jQuery menyediakan fungsionalitas seperti itu?
jquery
jquery-selectors
Suan
sumber
sumber
AND
akan.classA.classB
.Menggunakan koma mungkin tidak cukup jika Anda memiliki beberapa objek jQuery yang perlu digabungkan.
Metode .add () menambahkan elemen yang dipilih ke set hasil:
Ini lebih bertele-tele daripada
'.classA, .classB'
, tetapi memungkinkan Anda membangun pemilih yang lebih kompleks seperti berikut:sumber
Saya telah menulis plugin (5 baris kode) yang sangat sederhana untuk fungsi ini:
http://byrichardpowell.github.com/jquery-or/
Ini memungkinkan Anda untuk secara efektif mengatakan "dapatkan elemen ini, atau jika elemen itu tidak ada, gunakan elemen ini". Sebagai contoh:
Sementara jawaban yang diterima menyediakan fungsionalitas yang serupa dengan ini, jika kedua penyeleksi (sebelum & setelah koma) ada, kedua penyeleksi akan dikembalikan.
Saya harap ini terbukti bermanfaat bagi siapa saja yang mungkin mendarat di halaman ini melalui google.
sumber
"a" || "b"
vsnull || "b"
di vanilla JS. Jika kita menerapkan perilaku yang sama di sini,$(a).or(b)
harus kembali$(a)
jika ada, jika tidak maka akan kembali$(b)
. Saya tidak berpikir ada yang salah dengan nomenklatur ini, karena "atau" cocok dengan perilaku JS "||" (atau) operator.or
. Apa yang dibicarakan orang lain lebih seperti sebuahconcat
ataumerge
tindakan.Jika Anda ingin menggunakan konstruk standar elemen = element1 || element2 di mana JavaScript akan mengembalikan yang pertama yang benar, Anda dapat melakukan hal itu:
yang akan mengembalikan elemen pertama yang sebenarnya ditemukan. Tetapi cara yang lebih baik mungkin adalah dengan menggunakan konstruk koma pemilih jQuery (yang mengembalikan array elemen yang ditemukan) dengan cara ini:
yang akan mengembalikan elemen yang ditemukan pertama kali.
Saya menggunakannya dari waktu ke waktu untuk menemukan elemen aktif dalam daftar atau elemen default jika tidak ada elemen aktif. Sebagai contoh:
yang akan mengembalikan li dengan kelas aktif atau, jika tidak ada, hanya akan mengembalikan li terakhir.
Entah akan bekerja. Namun, ada penalti kinerja potensial, sebagai || akan berhenti memproses segera setelah ia menemukan sesuatu yang benar sedangkan pendekatan array akan mencoba untuk menemukan semua elemen bahkan jika telah menemukan yang sudah. Kemudian lagi, menggunakan || konstruk berpotensi memiliki masalah kinerja jika harus melalui beberapa penyeleksi sebelum menemukan yang akan kembali, karena ia harus memanggil objek jQuery utama untuk masing-masing (saya benar-benar tidak tahu apakah ini adalah hit kinerja atau tidak, sepertinya logis kalau bisa). Secara umum, saya menggunakan pendekatan array ketika pemilih adalah string yang agak panjang.
sumber
Akhirnya saya menemukan hack bagaimana melakukannya:
(memilih div dengan kelas
classA
ATAUclassB
dengan rentang anak langsung)sumber
Daniel A. White Solution sangat cocok untuk kelas.
Saya punya situasi di mana saya harus menemukan bidang input seperti donee_1_card di mana 1 adalah indeks.
Solusi saya telah
Meskipun saya tidak yakin seberapa optimal itu.
sumber