Pourquoi les modifications apscopes à jQuery $ .fn.data () ne mettent-elles pas à jour les atsortingbuts HTML 5 data- * correspondants?

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 )