Pourquoi ne pas les changements de jQuery $.fn.de données() mise à jour le correspondant html 5 de données* les attributs?
Voici un exemple simple pour illustrer le comportement:
Compte tenu de ce balisage html:
<div data-company="Microsoft"></div>
et ce jQuery code (à l'aide de 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!
Depuis jQuery importe automatiquement le HTML5 données* en jQuery données de l'objet, ne pas les attributs être mis à jour lorsque les données changent?
"div[data-company='Apple'"
- vous oublié de le fermer avec]
Vous devez vous connecter pour publier un commentaire.
Normalement, il n'y a pas besoin d'allers-retours
.data()
's si vous êtes cohérent dans l'utilisation .data() pour accéder à/définir/modifier les données sur les éléments DOM. Pour cette raison, il est préférable d'éviter la surcharge des performances de l'accès au DOM pour tous les.data()
définir/modifier le fonctionnement (.data()
stocke ses valeurs dansjQuery.cache
en interne).Si vous voulez forcer l'aller-retour le comportement de vous-même, vous pouvez vous abonner à la "setData" ou "changeData événements", puis appuyez sur le
.data()
mise à jour de ces événements à travers correspondant à l'élément du DOM via.attr()
..data()
cache. Si vous souhaitez utiliser un sélecteur comme ça, vous auriez besoin de mettre en œuvre les allers-retours sur "changeData" cas que j'ai mentionné. Ensuite, vous pouvez garder vos données d'attributs en synchronisation avec.data()
changements (et vous seriez en mesure de le faire que de manière sélective, sur les éléments que vous avez l'intention d'interroger plus tard)..data()
de définir les données sur un nouvel élément, puis l'ajouter à la cathédrale, puis le récupérer à partir du DOM, puis de trouver qu'il n'y a pas de données. La documentation n'est pas de tirage presque assez d'attention que vous devez utiliser .attr('data-...') dans ce scénario.C'est le bon comportement en fonction de l'docs:
(à partir de: http://api.jquery.com/data)
La requête sélecteur de
[data-company]
vérifications sur les attributs, tout en.data
ne pas les mettre à jour.Vous pouvez modifier le code pour utiliser uniquement
.attr('data-
, éviter.data
complètement.Vous pouvez définir votre propre fonction qui met à jour les données et attr:
Utiliser comme ceci:
Si vous n'utilisez pas les sélecteurs CSS, vous pouvez créer votre propre sélecteur jQuery:
Utiliser comme ceci:
https://jsfiddle.net/oriadam/a14jvqcw/