Il est mentionné dans le .data()
documentation
Les attributs data- sont intégrés lors du premier accès à la propriété data et ne sont ensuite plus accessibles ou modifiés (toutes les valeurs de données sont alors stockées en interne dans jQuery).
Ce sujet a également été abordé sur Pourquoi les modifications apportées à jQuery $.fn.data() ne mettent pas à jour les attributs data-* de html 5 correspondants ?
La démo sur ma réponse originale ci-dessous ne semble plus fonctionner.
Réponse actualisée
Encore une fois, d'après le .data()
documentation
Le traitement des attributs avec des tirets intégrés a été modifié dans jQuery 1.6 pour se conformer à la spécification HTML5 du W3C.
Donc pour <div data-role="page"></div>
ce qui suit est vrai $('div').data('role') === 'page'
Je suis presque sûr que $('div').data('data-role')
fonctionnait dans le passé, mais cela ne semble plus être le cas. J'ai créé une meilleure vitrine qui enregistre en HTML plutôt que d'avoir à ouvrir la Console et j'ai ajouté un exemple supplémentaire du passage de multi-hyphen à camelCase données - attributs conversion.
Démonstration mise à jour (2015-07-25)
Voir aussi jQuery Data ou 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();
Démo plus ancienne
Réponse originale
Pour ce HTML :
<div id="foo" data-helptext="bar"></div>
<a href="#" id="changeData">change data value</a>
et ce JavaScript (avec 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;
});
Voir la démo
Utilisation de la Outils de développement de Chrome Console pour inspecter le DOM, le $('#foo').data('helptext', 'Testing 123');
n'est pas mettre à jour la valeur comme indiqué dans le Console mais $('#foo').attr('data-helptext', 'Testing 123');
fait.
0 votes
Le code semble correct. Aucun problème dans cette démo . Quelle version de jQuery utilisez-vous ?
0 votes
J'utilise la version 1.5.1 fournie avec le modèle de projet ASP NET MVC. Serait-il possible que je doive mettre à jour jQuery ?
0 votes
OK, ce n'est pas la version de jQuery alors. Je pensais que c'était peut-être une très vieille version. L'API data() que vous utilisez a été ajoutée dans la version 1.2.3.
0 votes
Pourriez-vous ajouter le balisage s'il vous plaît ? Utilisez-vous un code HTML5 personnalisé
data-
attribut ?0 votes
Comment observez-vous la valeur ? jQuery ne persiste pas la valeur dans le DOM, bien qu'il la mette à jour correctement. Voir ma réponse ci-dessous pour un test et une explication