Nó được đề cập trong .data()
tài liệu
Các thuộc tính dữ liệu được kéo trong lần đầu tiên thuộc tính dữ liệu được truy cập và sau đó không còn được truy cập hoặc bị thay đổi (tất cả các giá trị dữ liệu sau đó được lưu trữ bên trong jQuery)
Điều này cũng được đề cập đến sao Không thay đổi đối với jQuery $ .fn.data () cập nhật các thuộc tính dữ liệu html * tương ứng?
Bản demo về câu trả lời ban đầu của tôi dưới đây dường như không còn hoạt động nữa.
Cập nhật câu trả lời
Một lần nữa, từ .data()
tài liệu
Việc xử lý các thuộc tính bằng dấu gạch ngang được thay đổi trong jQuery 1.6 để phù hợp với đặc tả HTML5 của W3C.
Vì vậy đối với <div data-role="page"></div>
sau đây là đúng$('div').data('role') === 'page'
Tôi khá chắc chắn rằng nó $('div').data('data-role')
đã hoạt động trong quá khứ nhưng điều đó dường như không còn là vấn đề nữa. Tôi đã tạo một bản trình diễn tốt hơn để ghi nhật ký vào HTML thay vì phải mở Bảng điều khiển và thêm một ví dụ bổ sung về chuyển đổi thuộc tính dữ liệu đa dấu gạch nối sang camelCase .
Bản cập nhật cập nhật (2015-07-25)
Cũng xem 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();
Bản demo cũ hơn
Câu trả lời gốc
Đối với HTML này:
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
và JavaScript này (với 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;
});
Xem bản demo
Sử dụng Bảng điều khiển DevTools của Chrome để kiểm tra DOM, việc này không cập nhật giá trị như đã thấy trong Bảng điều khiển nhưng thực hiện.$('#foo').data('helptext', 'Testing 123');
$('#foo').attr('data-helptext', 'Testing 123');