Voici un exemple simple pour illustrer le comportement:
Étant donné ce balisage HTML:
et ce code jQuery (en utilisant jQuery 1.5.1):
// read the data alert($("div").data("company")); // returns Microsoft <<< OK! // set the data $("div").data("company","Apple"); alert($("div").data("company")); // returns Apple <<< OK! // attribute selector alert($("div[data-company='Apple']").length); // returns 0 <<< WHY??? // attribute selector again alert($("div[data-company='Microsoft']").length); // returns 1 <<< WHY??? // set the attribute directly $("div").attr("data-company","Apple"); alert($("div[data-company='Apple']").length); // now returns 1 <<< OK!
Puisque jQuery importe automatiquement le fichier HTML5 data- * dans l’object de données de jQuery, les atsortingbuts ne doivent-ils pas être mis à jour également lorsque les données sont modifiées?
Normalement, il n’est pas nécessaire de .data()
si vous utilisez systématiquement .data () pour accéder / définir / modifier des données sur des éléments DOM. Pour cette raison, il est logique d’éviter la surcharge de performances .data()
l’access au DOM pour chaque .data()
set / modify .data()
( .data()
stocke ses valeurs dans jQuery.cache
interne).
Si vous souhaitez forcer le comportement aller-retour vous-même, vous pouvez vous abonner aux événements “setData” ou “changeData”, puis transmettre la mise à jour .data()
dans ces événements à l’élément DOM correspondant via .attr()
.
C’est le comportement correct selon la documentation:
Les atsortingbuts de données sont extraits lors du premier access à la propriété de données, puis ils ne sont plus consultés ni mutés (toutes les valeurs de données sont ensuite stockées en interne dans jQuery).
(de: http://api.jquery.com/data )