Pardonnez-moi de ne pas être plus précis à ce sujet. J'ai un bug tellement étrange. Après le chargement de la documentation, je boucle certains éléments qui ont à l'origine data-itemname=""
et je définis ces valeurs à l'aide de .attr("data-itemname", "someValue")
.
Problème: plus tard, lorsque je boucle sur ces éléments, si je le fais elem.data().itemname
, j'obtiens ""
, mais si je le fais elem.attr("data-itemname")
, j'obtiens "someValue"
. C'est comme si le .data()
getter de jQuery n'obtient que les éléments qui sont initialement définis pour contenir une valeur, mais s'ils sont initialement vides, puis définis ultérieurement, ils .data()
n'obtiennent pas la valeur plus tard.
J'ai essayé de recréer ce bogue mais je n'ai pas pu.
Éditer
J'ai recréé le bogue! http://jsbin.com/ihuhep/edit#javascript,html,live
Aussi, extraits du lien ci-dessus ...
JS:
var theaters = [
{ name: "theater A", theaterId: 5 },
{ name: "theater B", theaterId: 17 }
];
$("#theaters").html(
$("#theaterTmpl").render(theaters)
);
// DOES NOT WORK - .data("name", "val") does NOT set the val
var theaterA = $("[data-theaterid='5']");
theaterA.find(".someLink").data("tofilllater", "theater5link"); // this does NOT set data-tofilllater
$(".someLink[data-tofilllater='theater5link']").html("changed link text"); // never gets changed
// WORKS - .attr("data-name", "val") DOES set val
var theaterB = $("[data-theaterid='17']");
theaterB.find(".someLink").attr("data-tofilllater", "theater17link"); // this does set data-tofilllater
$(".someLink[data-tofilllater='theater17link']").html("changed link text");
HTML:
<body>
<div id="theaters"></div>
</body>
<script id="theaterTmpl" type="text/x-jquery-tmpl">
<div class="theater" data-theaterid="{{=theaterId}}">
<h2>{{=name}}</h2>
<a href="#" class="someLink" data-tofilllater="">need to change this text</a>
</div>
</script>
elem.data("itemname")
pas elem.data().itemname
?
elem.data().itemname = somevalue;
ne change donc pas les données sous-jacentes.)