Es wird in der .data()
Dokumentation erwähnt
Die Datenattribute werden beim ersten Zugriff auf die Dateneigenschaft abgerufen und dann nicht mehr abgerufen oder mutiert (alle Datenwerte werden dann intern in jQuery gespeichert).
Dies wurde auch behandelt unter Warum aktualisieren Änderungen an jQuery $ .fn.data () nicht die entsprechenden HTML 5-Daten- * -Attribute?
Die Demo zu meiner ursprünglichen Antwort unten scheint nicht mehr zu funktionieren.
Antwort aktualisiert
Wieder aus der .data()
Dokumentation
Die Behandlung von Attributen mit eingebetteten Bindestrichen wurde in jQuery 1.6 geändert, um der W3C-HTML5-Spezifikation zu entsprechen.
Also für <div data-role="page"></div>
folgendes gilt$('div').data('role') === 'page'
Ich bin mir ziemlich sicher, dass das $('div').data('data-role')
in der Vergangenheit funktioniert hat, aber das scheint nicht mehr der Fall zu sein. Ich habe eher ein besseres Schaufenster , welche Protokolle in HTML erstellt , als wenn die Konsole zu öffnen und ein weiteres Beispiel für den Multi-Bindestrich hinzugefügt camelcase Daten- Attribute Konvertierung.
Aktualisierte Demo (25.07.2015)
Siehe auch 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();
Ältere Demo
Ursprüngliche Antwort
Für diesen HTML:
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
und dieses JavaScript (mit 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;
});
Siehe Demo
Wenn Sie die Chrome DevTools- Konsole zum Überprüfen des DOM verwenden, wird der in der Konsole angezeigte Wert $('#foo').data('helptext', 'Testing 123');
nicht aktualisiert , jedoch.$('#foo').attr('data-helptext', 'Testing 123');