Saya punya skenario berikut:
var el = 'li';
dan ada 5 <li>
's pada halaman masing-masing dengan data-slide=number
atribut (nomor masing-masing 1,2,3,4,5) .
Saya sekarang perlu menemukan nomor slide yang sedang aktif yang dipetakan ke var current = $('ul').data(current);
dan diperbarui pada setiap perubahan slide.
Sejauh ini percobaan saya tidak berhasil, mencoba membuat pemilih yang cocok dengan slide saat ini:
$('ul').find(el+[data-slide=+current+]);
tidak cocok / mengembalikan apa pun ...
Alasan saya tidak bisa meng-hardcode li
bagian tersebut adalah karena ini adalah variabel yang dapat diakses pengguna yang dapat diubah ke elemen lain jika diperlukan, jadi itu mungkin tidak selalu menjadi li
.
Ada ide tentang apa yang saya lewatkan?
.find(el+[data-slide=+current+]);
adalah kode yang Anda tulis? sepertinya Anda melewatkan beberapa kutipan untuk"[data-slide]"
$('*[data-slide]')
Anda dapat menggunakannya dengan misalnya$('*[data-slide]').each( function() { ... });
Jawaban:
Anda harus menyuntikkan nilai
current
ke dalam pemilih Atribut Setara :Untuk lingkungan JavaScript yang lebih lama ( ES5 dan sebelumnya):
sumber
$("ul").find(el + "[data-slide='" + current +"']");
.jika Anda tidak ingin mengetik semua itu, inilah cara yang lebih pendek untuk melakukan kueri berdasarkan atribut data:
FYI: http://james.padolsey.com/javascript/a-better-data-selector-for-jquery/
sumber
<ul><li data-slide="item"></li></ul>
pemilih jawaban ini akan kembali tidak terdefinisi sehingga tidak berfungsi mengingat skenario pengguna. Jawaban ini AKAN bekerja untuk struktur.<ul data-slide="item"><li></li></ul>
Sementara saya mengerti mengapa popularitasnya karena singkatnya, secara teknis jawaban itu salah. jsfiddle.net/py5p2abL/1[0]
untuk mengakses elemen pertama yang ditemukan..find("[data-attrib='value']")
tidak berfungsi. Saya tidak tahu apakah nilai atribut data ditambahkan oleh jQuery atau tidak ...$.find
secara khusus menemukan keturunan elemen itu, tetapi menggunakan sintaksis filter dalam string pemilih hanya akan menyaring hasilnya.Saat mencari dengan [data-x = ...], hati-hati, itu tidak berfungsi dengan setter jQuery.data (..) :
Anda bisa menggunakan ini sebagai gantinya:
sumber
$.fn.filterByData
brilian; Namun, ini adalah peringatan untuk copy-pasters di luar sana ... Anda hanya perlu$('<b>').filterByData('x', 1)
menemukan<b>
tagdata-x="1"
. jika Anda menyalin-menempelkan.data(x, 1)
bagian ... Anda akan mengaturdata-x
ke "1" sebelum memfilter.Saya meningkatkan ekstensi filterByData psiko brm ke jQuery.
Di mana mantan ekstensi mencari pasangan nilai kunci, dengan ekstensi ini Anda juga dapat mencari keberadaan atribut data, terlepas dari nilainya.
Pemakaian:
Tampilkan cuplikan kode
Atau biola: http://jsfiddle.net/PTqmE/46/
sumber
Tanpa JQuery, ES6
Saya tahu pertanyaannya adalah tentang JQuery, tetapi pembaca mungkin menginginkan metode JS murni.
sumber
Saya telah menghadapi masalah yang sama saat mengambil elemen menggunakan atribut jQuery dan data- *.
jadi untuk referensi Anda, kode terpendek ada di sini:
Ini adalah Kode HTML saya:
Ini adalah pemilih jQuery saya:
sumber
Saya harap ini bisa bekerja lebih baik
Terima kasih
sumber
Pemilih ini
$("ul [data-slide='" + current +"']");
akan bekerja untuk struktur berikut:Sementara ini
$("ul[data-slide='" + current +"']");
akan bekerja untuk:<ul data-slide="item"><li></li></ul>
sumber
Kembali ke pertanyaan aslinya, tentang cara membuat ini bekerja tanpa mengetahui jenis elemen di muka, berikut hal ini:
sumber