Saya memiliki koleksi kotak centang dengan id yang dihasilkan dan beberapa di antaranya memiliki atribut tambahan. Apakah mungkin menggunakan JQuery untuk memeriksa apakah suatu elemen memiliki atribut tertentu? Misalnya, dapatkah saya memverifikasi jika elemen berikut memiliki atribut "myattr"? Nilai atribut dapat bervariasi.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Misalnya bagaimana saya bisa mendapatkan koleksi semua kotak centang yang memiliki atribut ini tanpa memeriksa satu per satu? Apakah ini mungkin?
jquery
attributes
Ciprian Grosu
sumber
sumber
$filtered = $collection.filter('[attribute_name]');
Jawaban:
Apakah maksud Anda dapat memilihnya? Jika demikian, maka ya:
sumber
href
atribut.$("#myBox").find('a').filter(':not([href])')
EDIT:
Di atas akan jatuh ke-
else
cabang ketikamyattr
ada tetapi string kosong atau "0". Jika itu masalah, Anda harus mengujinya secara eksplisitundefined
:sumber
undefined
dianggap sebagai tepi kasus dan perbandingan di atas akan bekerja di 99% dari semua kasus.Saya tahu ini sudah lama sejak pertanyaan diajukan, tetapi saya menemukan cek menjadi lebih jelas seperti ini:
(Seperti yang ditemukan di situs ini di sini )
Dokumentasi tentang ini dapat ditemukan di sini
sumber
Ini akan berhasil:
sumber
$(this).<something>
ketika di sini Anda dapat melakukanthis.hasAttribute('...')
secara langsung (dan tentu saja tidak peduli dengan peramban yang lebih tua).Dalam JavaScript, ...
... mengembalikan
true
*. Perbedaan antara==
dan===
. Juga, namaundefined
dapat didefinisikan (itu bukan kata kunci sepertinull
apa) sehingga Anda lebih baik memeriksa beberapa cara lain. Cara yang paling dapat diandalkan adalah membandingkan nilai baliktypeof
operator.Namun demikian, membandingkan dengan nol harus berhasil dalam kasus ini.
* Dengan asumsi
undefined
sebenarnya tidak terdefinisi.sumber
$("input[attr]").length
mungkin opsi yang lebih baik.sumber
Beberapa ide dilontarkan menggunakan "typeof", jQuery ".is" dan ".filter" jadi saya pikir saya akan memposting perbandingan cepat dari mereka. Typeof tampaknya menjadi pilihan terbaik untuk ini. Sementara yang lain akan bekerja, tampaknya ada perbedaan kinerja yang jelas ketika meminta pustaka jq untuk upaya ini.
sumber
sumber
isset()
atau misalnya dalam js$("#element").attr('my_attr') === false
,seperti pada posting ini , menggunakan
.is
dan pemilih atribut[]
, Anda dapat dengan mudah menambahkan fungsi (atau prototipe):sumber
sumber
secara sederhana:
info lebih lanjut: dokumen resmi
sumber
Selain memilih semua elemen dengan atribut
$('[someAttribute]')
atau$('input[someAttribute]')
Anda juga dapat menggunakan fungsi untuk melakukan pemeriksaan boolean pada objek seperti dalam penangan klik:if(! this.hasAttribute('myattr') ) { ...
sumber
Saya telah membuat paket npm dengan perilaku yang dimaksudkan seperti dijelaskan di atas dalam pertanyaan.
Tautan ke [npm] dan [github]
Penggunaannya sangat sederhana. Sebagai contoh:
mengembalikan true.
Bekerja dengan camelcase juga.
sumber
Untuk memilih elemen yang memiliki atribut tertentu, lihat jawaban di atas.
Untuk menentukan apakah elemen jQuery yang diberikan memiliki atribut spesifik, saya menggunakan plugin kecil yang mengembalikan
true
jika elemen pertama dalam koleksi ajQuery memiliki atribut ini:sumber
JQuery akan mengembalikan atribut sebagai string. Oleh karena itu Anda dapat memeriksa panjang string itu untuk menentukan apakah diset:
sumber