Katakanlah saya memiliki 4 elemen div dengan kelas .navlink
, yang, ketika diklik, gunakan .data()
untuk menyetel kunci yang dipanggil 'selected'
, ke nilai true
:
$('.navlink')click(function() { $(this).data('selected', true); })
Setiap kali yang baru .navlink
diklik, saya ingin menyimpan yang sebelumnya dipilih navlink
untuk manipulasi nanti. Adakah cara cepat dan mudah untuk memilih elemen berdasarkan apa yang disimpan menggunakan .data()
?
Sepertinya tidak ada jQuery : filter yang sesuai dengan tagihan, dan saya mencoba yang berikut (dalam peristiwa klik yang sama), tetapi untuk beberapa alasan tidak berhasil:
var $previous = $('.navlink').filter(
function() { $(this).data("selected") == true }
);
Saya tahu bahwa ada cara lain untuk mencapai ini, tetapi saat ini saya hanya ingin tahu apakah itu dapat dilakukan melalui .data()
.
$("*").filter(function() { return $(this).data("DATA IDENTIFIER HERE") == DATA VALUE HERE; });
Sekadar catatan, Anda dapat memfilter data dengan jquery (pertanyaan ini cukup lama, dan jQuery berevolusi sejak saat itu, jadi tepat untuk menulis solusi ini juga):
atau, lebih baik (untuk kinerja):
atau, jika Anda ingin mendapatkan semua elemen dengan
data-selected
set:Perhatikan bahwa metode ini hanya akan berfungsi dengan data yang disetel melalui atribut html. Jika Anda menyetel atau mengubah data dengan
.data()
panggilan tersebut, metode ini tidak akan berfungsi lagi.sumber
.data()
metode alih-alihdata-
atribut. Lihat biola ini: jsfiddle.net/bryandowning/tySWC - Selain itu,.find()
metode ini mencari turunan dari pemilih sebelumnya. Dalam contoh yang diberikan,data-selected
adalah atribut dari.navlink
, bukan anak dari.navlink
. Juga,$('div p')
dan$('div').find('p')
pada dasarnya setara. Menggunakan.find()
sepertinya itu mungkin lebih lambat karena pemanggilan fungsi tambahan (meskipun saya tidak yakin tentang ini). Harap perbaiki saya jika saya salah tentang semua ini (Saya sangat berharap metode ini berhasil)..data()
, karena jQuery mencari melalui DOM, saya mempostingnya untuk mereka (seperti saya) yang mendapatkan pertanyaan ini karena alasan lain; 2) benar,.find()
pencarian melalui anak-anak, jadi salah dalam contoh ini; 3) Anda salah, mereka tidak setara, karena jQuery mencari dari kanan ke kiri, lihat jonraasch.com/blog/…$('[data-selected]')
itu membantu saya keluar untuk sesuatu seperti$('ul.categories a[data-categories_id]').click(......);
Kita bisa membuat plugin dengan cukup mudah:
Penggunaan (memeriksa tombol radio):
sumber
Dua hal yang saya perhatikan (mungkin saja kesalahan sejak Anda menuliskannya).
$('.navlink').click
)return $(this).data("selected")==true
)sumber
Kedengarannya lebih banyak pekerjaan daripada nilainya.
1) Mengapa tidak hanya memiliki satu variabel JavaScript yang menyimpan referensi ke objek elemen \ jQuery yang saat ini dipilih.
2) Mengapa tidak menambahkan kelas ke elemen yang saat ini dipilih. Kemudian Anda dapat meminta DOM untuk kelas ".active" atau sesuatu.
sumber