Apakah ada cara agar saya dapat menjalankan yang berikut ini:
var data = $("#dataTable").data('timer');
var diffs = [];
for(var i = 0; i + 1 < data.length; i++) {
diffs[i] = data[i + 1] - data[i];
}
alert(diffs.join(', '));
Hanya jika ada atribut yang disebut data-timer pada elemen dengan id #dataTable?
javascript
jquery
Angela
sumber
sumber
data-
atribut tetapi akan ada data yang disimpan di jQuery dan sebaliknya.Jawaban:
CATATAN ini hanya kembali
true
jika atribut data bukan string kosong atau nilai "falsey" misalnya0
ataufalse
.Jika Anda ingin memeriksa keberadaan atribut data, bahkan jika kosong, lakukan ini:
sumber
if ($("#dataTable[data-timer]").length) { ... }
.if ( $("#dataTable").is("[data-timer]") ) { ... }
. Ini juga lebih berguna jika Anda sudah memiliki referensi ke tabel di objek jQuery lain.sumber
if (typeof $('#dataTable').data('timer') !== 'undefined') ...
.typeof
cek$('#dataTable').data('timer', Date.now())
. Tampaknya OP ingin memeriksa apakah ada atribut data aktual. Solusi @ niiru (atau yang Anda tawarkan di komentar untuk solusi itu) lebih baik, dalam hal ini.undefined
secara konsisten. Kita tahu mengapatypeof
digunakan untuk memeriksaundefined
dalam beberapa kasus, tapi aku merasa membingungkan untuk melihatnya sedang diperiksa dengantypeof
di satu tempat dan tanpa di lain. Selain itu, tidak seperti menggunakantypeof
menambahkan kode yang jauh lebih rumit . Ini mungkin lebih eksplisit, mungkin berlebihan paling banyak tetapi tidak terlalu rumit. Saya mengerti maksud Anda, tetapi saya akan mengatakan bahwa tidak menggunakannya adalah penyederhanaan yang berlebihan. ;]Demi memberikan jawaban yang berbeda dari yang di atas; Anda bisa memeriksanya
Object.hasOwnProperty(...)
seperti ini:alternatifnya, jika Anda memiliki beberapa elemen data yang ingin Anda iterate, Anda bisa mengubah-ubah
.data()
objek dan iterate di atasnya seperti ini:Tidak mengatakan solusi ini lebih baik daripada yang lain di sini, tapi setidaknya itu pendekatan lain ...
sumber
data-foo-bar
maka cek Anda harus.data().hasOwnProperty("fooBar")
, tidak.data().hasOwnProperty("foo-bar")
Atau kombinasikan dengan beberapa vanilla JS
sumber
data()
alih-alihattr()
, itu tidak akan menemukan atribut :(Anda dapat menggunakan metode hasData jQuery.
http://api.jquery.com/jQuery.hasData/
Ini hanya akan memeriksa keberadaan objek data (atau peristiwa) pada elemen Anda, itu tidak akan dapat mengkonfirmasi apakah ia secara khusus memiliki objek "timer".
sumber
Jika Anda ingin membedakan antara nilai kosong dan nilai yang hilang, Anda dapat menggunakan jQuery untuk memeriksa seperti ini.
Jadi dari pertanyaan awal Anda akan melakukan ini.
sumber
Anda dapat membuat jQuery-plugin yang sangat sederhana untuk menanyakan elemen untuk ini:
Maka Anda cukup menggunakan
$("#dataTable").hasData('timer')
Gotchas:
false
hanya jika nilainya tidak adaundefined
; jika itu diatur untukfalse
/null
ituhasData()
masih akan kembalitrue
.$.hasData()
yang hanya memeriksa apakah ada data pada elemen yang ditetapkan.sumber
Saya telah menemukan ini berfungsi lebih baik dengan secara dinamis mengatur elemen data:
sumber
Semua jawaban di sini menggunakan perpustakaan jQuery.
Tapi javascript vanilla sangat mudah.
Jika Anda ingin menjalankan script hanya jika elemen dengan
id
of#dataTable
juga memilikidata-timer
atribut, maka langkah-langkah adalah sebagai berikut:sumber
Ini adalah solusi termudah menurut saya adalah memilih semua elemen yang memiliki atribut data tertentu:
Ini adalah screenshot cara kerjanya.
sumber
Jawaban salah - lihat EDIT di bagian akhir
Biarkan saya membangun jawaban Alex.
Untuk mencegah pembuatan objek data jika tidak ada, sebaiknya saya lakukan:
Kemudian, di mana
$this
tidak ada objek data yang dibuat,$.hasData
kembalifalse
dan tidak akan dijalankan$this.data(key)
.EDIT: fungsi
$.hasData(element)
hanya berfungsi jika data diatur menggunakan$.data(element, key, value)
, bukanelement.data(key, value)
. Karena itu, jawaban saya salah.sumber
Saya membutuhkan boolean sederhana untuk bekerja dengannya. Karena tidak terdefinisi dari tidak ada, dan tidak salah, saya menggunakan
!!
untuk mengonversi ke boolean:Solusi alternatif menggunakan filter:
sumber
sumber
.data('timer')
tidak terdefinisi, Anda akan mendapatkan TypeError: $ (...). Data (...) tidak terdefinisi saat memeriksadata.length
. Ini kemungkinan besar merupakan dasar dari pertanyaan OP, yaitu memastikan bahwa seseorang dapat dengan aman memeriksa didata.length
tempat lain. Selain itu, Anda tidak akan dapat mengatakan dengan pasti apakahdata
string, array atau objek, yang mungkin berisi atau tidak berisilength
sebagai properti yang ditentukan.Anda dapat memeriksa dengan pemilihan atribut css dengan
sumber
Dan bagaimana dengan:
sumber