Apakah ada metode yang mudah dan langsung untuk memilih elemen berdasarkan data
atributnya? Misalnya, pilih semua jangkar yang memiliki atribut data bernama customerID
yang memiliki nilai 22
.
Saya agak ragu untuk menggunakan rel
atau atribut lain untuk menyimpan informasi tersebut, tetapi saya merasa lebih sulit untuk memilih elemen berdasarkan data apa yang disimpan di dalamnya.
jquery
html
custom-data-attribute
Hazem Salama
sumber
sumber
$('*[data-customerID]')
Anda dapat menggunakannya dengan misalnya$('*[data-customerID]').each( function() { ... });
Jawaban:
Anda seharusnya dapat menghilangkan
*
, tetapi jika saya mengingatnya dengan benar, tergantung pada versi jQuery yang Anda gunakan, ini mungkin memberikan hasil yang salah.Perhatikan bahwa untuk kompatibilitas dengan Selectors API (
document.querySelector{,all}
), tanda kutip di sekitar nilai atribut (22
) mungkin tidak dihilangkan dalam kasus ini .Juga, jika Anda sering bekerja dengan atribut data dalam skrip jQuery, Anda mungkin ingin mempertimbangkan untuk menggunakan plugin atribut data kustom HTML5 . Ini memungkinkan Anda untuk menulis kode yang lebih mudah dibaca dengan menggunakan
.dataAttr('foo')
, dan menghasilkan ukuran file yang lebih kecil setelah minifikasi (dibandingkan dengan menggunakan.attr('data-foo')
).sumber
.data()
memetakan kedata-*
atribut kustom secara default, menjadikan plugin ini berlebihan. Itu masih bisa digunakan untuk versi jQuery yang lebih lama. ”$('[data-customerID]')
.data()
), kan?Untuk orang yang mencari Google dan ingin aturan umum tentang memilih dengan atribut data:
$("[data-test]")
akan memilih elemen apa saja yang hanya memiliki atribut data (tidak peduli nilai atributnya). Termasuk:$('[data-test~="foo"]')
akan memilih elemen mana pun yang berisi atribut datafoo
tetapi tidak harus tepat, seperti:$('[data-test="the_exact_value"]')
akan memilih elemen apa pun di mana nilai tepat atribut datathe_exact_value
, misalnya:tapi tidak
sumber
~=
cocok dengan kata-kata yang dipisahkan dengan spasi putih sedangkan*=
cocok dengan substring apa pun.^
karakter?$('[data-test^=foo]')
dalam hal ini Anda memilih apa pun yang dimulai dengan foo, seperti<div data-test="foo_exact_value">
atau<div data-test="food">
tetapi tidak<div data-test="seafoo">
Menggunakan
$('[data-whatever="myvalue"]')
akan memilih apa saja dengan atribut html, tetapi di jQueries yang lebih baru tampaknya jika Anda menggunakan$(...).data(...)
untuk melampirkan data, ia menggunakan beberapa peramban ajaib dan tidak memengaruhi html, karena itu tidak ditemukan.find
seperti yang ditunjukkan dalam jawaban sebelumnya .Verifikasi (diuji dengan 1.7.2+) (lihat juga biola ): (diperbarui agar lebih lengkap)
sumber
.filter
sini$item.attr('data-id', 10);
Saya belum melihat jawaban JavaScript tanpa jQuery. Semoga ini membantu seseorang.
Info:
atribut data
.querySelectorAll ();
sumber
Untuk memilih semua jangkar dengan atribut data
data-customerID==22
, Anda harus menyertakana
untuk membatasi ruang lingkup pencarian hanya untuk tipe elemen itu. Melakukan pencarian atribut data dalam satu lingkaran besar atau pada frekuensi tinggi ketika ada banyak elemen pada halaman dapat menyebabkan masalah kinerja.sumber
Contoh JS Asli
Dapatkan NodeList elemen
html:
<div data-id="container"></div>
Dapatkan elemen pertama
html:
<div id="container"></div>
Targetkan kumpulan node yang mengembalikan nodelist
html:
Dapatkan elemen berdasarkan pada beberapa nilai data (OR)
html:
Dapatkan elemen berdasarkan nilai data gabungan (DAN)
html:
Dapatkan item dari mana nilai dimulai
sumber
melalui metode filter Jquery ():
http://jsfiddle.net/9n4e1agn/1/
HTML:
JavaScript:
sumber
Konstruksi seperti ini:
$('[data-XXX=111]')
tidak berfungsi di Safari 8.0 .Jika Anda kumpulan data atribut dengan cara ini:
$('div').data('XXX', 111)
, hanya bekerja jika Anda menetapkan atribut data secara langsung dalam DOM seperti ini:$('div').attr('data-XXX', 111)
.Saya pikir itu karena tim jQuery mengoptimalkan pengumpul sampah untuk mencegah kebocoran memori dan operasi berat pada pembangunan kembali DOM pada setiap atribut perubahan data.
sumber
Agar ini berfungsi di Chrome, nilainya tidak boleh memiliki pasangan tanda kutip lainnya.
Ini hanya berfungsi, misalnya, seperti ini:
sumber
$('[data-action=setStatus]').removeClass('disabled')
Terkadang diinginkan untuk memfilter elemen berdasarkan apakah mereka memiliki data-item yang melekat padanya secara terprogram (alias tidak melalui atribut dom):
Di atas berfungsi tetapi tidak terlalu mudah dibaca. Pendekatan yang lebih baik adalah dengan menggunakan pemilih-semu untuk menguji hal semacam ini:
Sekarang kita dapat memperbaiki pernyataan asli menjadi sesuatu yang lebih lancar dan mudah dibaca:
sumber
Hanya untuk melengkapi semua jawaban dengan beberapa fitur 'standar hidup' - Sekarang (di era HTML5) dimungkinkan untuk melakukannya tanpa lib pihak ke-3:
document.querySelector('[data-answer="42"],[type="submit"]')
document.querySelectorAll('[data-answer="42"],[type="submit"]')
[data-answer="42"],[type="submit"]
[data-answer]
atauinput[type]
sumber