JQuery .de données() ne fonctionne pas?
Récemment, j'ai été de codage, et je suis tombé sur un drôle de problème. J'ai été de tenter d'attribuer un attribut de données à un nouvel élément, j'avais créé (via jQuery), seulement pour découvrir qu'il ne serait pas en fait assigner l'attribut. Voir le lien ci-dessous pour un exemple, le code est donné ci-dessous:
http://jsfiddle.net/y95p100c/1/
Une idée de pourquoi ce qui se passe? Je n'ai jamais tombé dans ce...
var div = $("<div />")
$(div).data("foo", "bar")
console.log($(div)[0].outerHTML) //prints <div></div>
- jQuery
.data()
fonction stocke les valeurs à l'intérieur.
Vous devez vous connecter pour publier un commentaire.
data
n'est pas ensembledata-*
attributs. Il gère un cache de données sans rapport avecdata-*
attributs. Il initialise dedata-*
attributs si il y a aucun présent, mais n'écrit jamais pour eux. Pour écrire à un attribut, l'utilisationattr
.Exemple: Mis À Jour Le Violon
Ce que vous voyez n'est qu'une des nombreuses façons cela peut être surprenant. Une autre est que si votre balisage est
<div id="elm" data-foo="bar"></div>
et à un certain moment vous utilisez$("#elm").data("foo")
pour obtenir la valeur (et il va en effet être"bar"
), alors vous n'$("#elm").data("foo", "update")
, l'attribut restedata-foo="bar"
mais les données gérées pardata
a maintenantfoo
égal à"update"
. Mais la règle ci-dessus, il explique:data
jamais écrit àdata-*
attrs.id
,className
,rel
,src
, ...). (prop
probablement ne créer une propriété sur ladiv
élément, mais ceux-là ne sont pas sérialisé quand vous regardezouterHTML
, parce qu'ils sont pas en HTML.)jQuery importe le
data-
attributs lorsque l'élément est chargé, mais ne sont pas accessibles par la suite. Les éléments sont stockés dans un jQuery structure interne. De l'API: