Belgelerde bahsediliyor.data()
Veri öznitelikleri, veri özelliğine ilk erişildiğinde çekilir ve ardından artık erişilmez veya değiştirilmez (tüm veri değerleri daha sonra dahili olarak jQuery'de depolanır)
Bu ayrıca , jQuery $ .fn.data () 'daki değişiklikler ilgili html 5 data- * özniteliklerini neden güncellemiyor?
Aşağıdaki orijinal cevabımla ilgili demo artık işe yaramıyor gibi görünüyor.
Güncellenen cevap
Yine .data()
belgelerden
Katıştırılmış tirelerle özniteliklerin işlenmesi, W3C HTML5 belirtimine uyması için jQuery 1.6'da değiştirildi.
Yani <div data-role="page"></div>
aşağıdakiler doğrudur$('div').data('role') === 'page'
$('div').data('data-role')
Geçmişte işe yaradığından oldukça eminim ama artık durum böyle görünmüyor. Konsolu açmak zorunda kalmadan HTML'ye günlük kaydeden daha iyi bir vitrin oluşturdum ve çoklu tireden camelCase veri özniteliklerine dönüştürme için ek bir örnek ekledim .
Güncellenmiş demo (2015-07-25)
Ayrıca jQuery Data ve Attr'e bakın.
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();
Daha eski demo
Orijinal cevap
Bu HTML için:
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
ve bu JavaScript (jQuery 1.6.2 ile)
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;
});
Demoyu görün
Kullanılması Chrome Geliştirme Araçları Konsolu DOM denetlemek üzere $('#foo').data('helptext', 'Testing 123');
vermez görüldüğü gibi değerini güncellemek Konsolundan ama $('#foo').attr('data-helptext', 'Testing 123');
yok.