Itu disebutkan dalam .data()
dokumentasi
Atribut data ditarik pertama kali properti data diakses dan kemudian tidak lagi diakses atau dimutasi (semua nilai data kemudian disimpan secara internal di jQuery)
Ini juga dibahas pada Mengapa tidak mengubah ke jQuery $ .fn.data () memperbarui atribut html 5 data- * yang sesuai?
Demo pada jawaban asli saya di bawah ini sepertinya tidak berfungsi lagi.
Jawaban yang diperbarui
Sekali lagi, dari .data()
dokumentasi
Perlakuan atribut dengan tanda hubung tertanam diubah di jQuery 1.6 agar sesuai dengan spesifikasi W3C HTML5.
Jadi untuk <div data-role="page"></div>
yang berikut ini benar$('div').data('role') === 'page'
Saya cukup yakin itu $('div').data('data-role')
berhasil di masa lalu tetapi tampaknya tidak menjadi masalah lagi. Saya telah membuat showcase yang lebih baik yang log ke HTML daripada harus membuka Konsol dan menambahkan contoh tambahan dari multi-hyphen ke konversi atribut data camelCase .
Demo yang diperbarui (2015-07-25)
Juga lihat jQuery Data vs Attr?
HTML
<div id="changeMe" data-key="luke" data-another-key="vader"></div>
<a href="#" id="changeData"></a>
<table id="log">
<tr><th>Setter</th><th>Getter</th><th>Result of calling getter</th><th>Notes</th></tr>
</table>
JavaScript (jQuery 1.6.2+)
var $changeMe = $('#changeMe');
var $log = $('#log');
var logger;
(logger = function(setter, getter, note) {
note = note || '';
eval('$changeMe' + setter);
var result = eval('$changeMe' + getter);
$log.append('<tr><td><code>' + setter + '</code></td><td><code>' + getter + '</code></td><td>' + result + '</td><td>' + note + '</td></tr>');
})('', ".data('key')", "Initial value");
$('#changeData').click(function() {
// set data-key to new value
logger(".data('key', 'leia')", ".data('key')", "expect leia on jQuery node object but DOM stays as luke");
// try and set data-key via .attr and get via some methods
logger(".attr('data-key', 'yoda')", ".data('key')", "expect leia (still) on jQuery object but DOM now yoda");
logger("", ".attr('key')", "expect undefined (no attr <code>key</code>)");
logger("", ".attr('data-key')", "expect yoda in DOM and on jQuery object");
// bonus points
logger('', ".data('data-key')", "expect undefined (cannot get via this method)");
logger(".data('anotherKey')", ".data('anotherKey')", "jQuery 1.6+ get multi hyphen <code>data-another-key</code>");
logger(".data('another-key')", ".data('another-key')", "jQuery < 1.6 get multi hyphen <code>data-another-key</code> (also supported in jQuery 1.6+)");
return false;
});
$('#changeData').click();
Demo yang lebih lama
Jawaban asli
Untuk HTML ini:
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
dan JavaScript ini (dengan jQuery 1.6.2)
console.log($('#foo').data('helptext'));
$('#changeData').click(function() {
$('#foo').data('helptext', 'Testing 123');
// $('#foo').attr('data-helptext', 'Testing 123');
console.log($('#foo').data('data-helptext'));
return false;
});
Lihat demo
Menggunakan Chrome DevTools Console untuk memeriksa DOM, $('#foo').data('helptext', 'Testing 123');
tidak memperbarui nilai seperti yang terlihat di Konsol tetapi $('#foo').attr('data-helptext', 'Testing 123');
tidak.