Saya menyimpan data menggunakan data-
pendekatan dalam tag HTML seperti:
<td><"button class='delete' data-imagename='"+results[i].name+"'>Delete"</button></td>
Saya kemudian mengambil data dalam panggilan balik seperti ini:
$(this).data('imagename');
Itu bekerja dengan baik. Apa yang saya terjebak adalah mencoba untuk menyelamatkan objek, bukan hanya salah satu properti itu. Saya mencoba melakukan ini:
<td><button class='delete' data-image='"+results[i]+"'>Delete</button></td>
Kemudian saya mencoba mengakses properti nama seperti ini:
var imageObj = $(this).data('image');
console.log('Image name: '+imageObj.name);
Log memberitahu saya undefined
. Jadi sepertinya saya bisa menyimpan string sederhana dalam data-
atribut tetapi saya tidak bisa menyimpan objek JSON ...
Saya juga mencoba menggunakan sintaks anak ini tanpa hasil:
<div data-foobar='{"foo":"bar"}'></div>
Adakah ide tentang cara menyimpan objek aktual di tag HTML menggunakan data-
pendekatan ini?
htmlspecialchars(json_encode($e))
(ide dari Nicolas menjawab komentar).jsonObject
perlu dirubah? sunting: kalau-kalau itu membantu orang lain, saya baru saja menemukan jawaban untuk pertanyaan itu di sini: stackoverflow.com/a/42864472"You don't need to stringify objects to store them using jQuery.data()"
Sebenarnya, contoh terakhir Anda:
tampaknya berfungsi dengan baik (lihat http://jsfiddle.net/GlauberRocha/Q6kKU/ ).
Yang menyenangkan adalah bahwa string dalam atribut data secara otomatis dikonversi ke objek JavaScript. Sebaliknya, saya tidak melihat kelemahan dalam pendekatan ini! Satu atribut cukup untuk menyimpan seluruh rangkaian data, siap digunakan dalam JavaScript melalui properti objek.
(Catatan: agar atribut data secara otomatis diberi tipe Objek daripada String, Anda harus berhati-hati untuk menulis JSON yang valid, khususnya untuk menyertakan nama kunci dalam tanda kutip ganda).
sumber
$('div').data('foobar').foo
. api.jquery.com/data'
tidak bekerja untuk saya sementara sayaecho json_encode($array)
dari php. Karena itu akan mengakhiri nilai atribut dengan kutipan tunggal. Adakah saran kecuali keluar dari kutipan tunggal secara manual dari array.?&quot;
(entitas HTML dua-lolos) Anda sehingga dirender di sumber Anda sebagai & quot ;. Tapi mungkin itu jenis hal yang ingin Anda hindari ketika Anda mengatakan "melarikan diri dari kutipan tunggal secara manual" ...Beginilah cara kerjanya untuk saya.
Obyek
Set
Encode objek yang dirubah dengan komponen encodeURIC () dan tetapkan sebagai atribut:
Dapatkan
Untuk mendapatkan nilai sebagai objek, parsing yang didekodekan, dengan decodeURIComponent () , nilai atribut:
sumber
Banyak masalah dengan menyimpan data serial dapat diselesaikan dengan mengubah string serial ke base64 .
String base64 dapat diterima di mana saja tanpa repot.
Melihat:
Konversikan ke / dari sesuai kebutuhan.
sumber
window.btoa
JSON.parse
menggunakan sebelum Anda dapat menggunakan hasilnya sebagai objek.Bagi saya ini berfungsi seperti itu, karena saya perlu menyimpannya di templat ...
sumber
$('body').data('myData', { h: "hello", w: "world" })
_____________________________________________________________________________________________________ Anda akan mendapatkan objek JSON Anda oleh$('body').data().myData
'<div data-dataObj=\''+ JSON.stringify(dataObj) +'\'></div>'
. Itu semua adalah kutipan tunggal, awal dan akhir hanya lolos, jadi itu akan sama dengan memiliki'{"some":"thing"}'
replace()
membahas kemungkinan tanda kutip tunggal muncul di data json, yang sepenuhnya mungkin.Triknya bagi saya adalah menambahkan tanda kutip ganda di sekitar kunci dan nilai . Jika Anda menggunakan fungsi PHP seperti
json_encode
akan memberi Anda string yang dikodekan JSON dan ide bagaimana menyandikan Anda dengan benar.jQuery('#elm-id').data('datakey')
akan mengembalikan objek string, jika string dikodekan dengan benar sebagai json.Sesuai dokumentasi jQuery: ( http://api.jquery.com/jquery.parsejson/ )
Melewati string JSON yang salah menghasilkan pengecualian JavaScript yang dilemparkan. Misalnya, berikut ini semua string JSON tidak valid:
"{test: 1}"
(test
tidak memiliki tanda kutip ganda di sekitarnya)."{'test': 1}"
('test'
menggunakan tanda kutip tunggal, bukan tanda kutip ganda)."'test'"
('test'
menggunakan tanda kutip tunggal, bukan tanda kutip ganda).".1"
(angka harus dimulai dengan angka;"0.1"
akan valid)."undefined"
(undefined
tidak dapat direpresentasikan dalam string JSON;,null
bagaimanapun, dapat)."NaN"
(NaN
tidak dapat direpresentasikan dalam string JSON; representasi langsung dari Infinity juga nsumber
Kombinasikan penggunaan
window.btoa
danwindow.atob
bersama denganJSON.stringify
danJSON.parse
.- Ini berfungsi untuk string yang berisi tanda kutip tunggal
Pengkodean data:
Decoding data:
Berikut adalah contoh bagaimana data dibangun dan diterjemahkan kemudian dengan peristiwa klik.
Buat html dan enkode data:
Decode data dalam event click handler:
sumber
Menggunakan sintaks jquery .data (obj) yang didokumentasikan memungkinkan Anda untuk menyimpan objek pada elemen DOM. Memeriksa elemen tidak akan menunjukkan
data-
atribut karena tidak ada kunci yang ditentukan untuk nilai objek. Namun, data dalam objek dapat dirujuk dengan kunci dengan.data("foo")
atau seluruh objek dapat dikembalikan.data()
.Jadi dengan asumsi Anda mengatur lingkaran dan
result[i] = { name: "image_name" }
:sumber
Untuk beberapa alasan, jawaban yang diterima hanya berfungsi bagi saya jika digunakan sekali pada halaman, tetapi dalam kasus saya saya mencoba untuk menyimpan data pada banyak elemen pada halaman dan entah bagaimana data itu hilang pada semua kecuali elemen pertama.
Sebagai alternatif, saya akhirnya menulis data ke dom dan menguraikannya kembali saat diperlukan. Mungkin kurang efisien, tetapi bekerja dengan baik untuk tujuan saya karena saya benar-benar membuat prototipe data dan tidak menulis ini untuk produksi.
Untuk menyimpan data yang saya gunakan:
Untuk kemudian membaca kembali data sama dengan jawaban yang diterima, yaitu:
Melakukannya dengan cara ini juga membuat data muncul di dom jika saya memeriksa elemen dengan debugger Chrome.
sumber
.data()
berfungsi dengan baik untuk sebagian besar kasus. Satu-satunya saat saya punya masalah adalah ketika string JSON sendiri memiliki satu kutipan. Saya tidak dapat menemukan cara mudah untuk melewati ini sehingga terpaksa menggunakan pendekatan ini (saya menggunakan Coldfusion sebagai bahasa server):sumber
Sebagai catatan, saya menemukan kode berikut berfungsi. Ini memungkinkan Anda untuk mengambil array dari tag data, mendorong elemen baru, dan menyimpannya kembali di tag data dalam format JSON yang benar. Karena itu kode yang sama dapat digunakan lagi untuk menambahkan elemen lebih lanjut ke array jika diinginkan. Saya menemukan bahwa
$('#my-data-div').attr('data-namesarray', names_string);
menyimpan array dengan benar, tetapi$('#my-data-div').data('namesarray', names_string);
tidak berhasil.sumber
});
sumber
Kode ini berfungsi dengan baik untuk saya.
Enkode data dengan btoa
Dan kemudian memecahkannya dengan atob
sumber