Pour une raison quelconque, j'ai cet énorme pet de cerveau aujourd'hui. >. <
J'ai des données JSON que j'attache à l'utilisation de jQuery .data () qui ressemble à ceci:
$.getJSON("names.php", function(data) {
//generate html string and append to DOM
$.each(data, function(i,item) {
var strHtml;
strHtml += "<img src="/images/" +item.PIC + ".jpg" id="" + item.ID + "" />";
})
$("body").html(strHtml);
//attach data to image ID
$.each(data, function(i,item) {
$("#" + item.ID).data(item.ID, {
NAME: item.NAME,
PHONE: item.PHONE,
EMAIL: item.EMAIL,
ADDRESS: item.ADDRESS,
...
...
...
});
}
}
Cela fonctionne bien; cependant, il a l'air un peu moche et j'essaye de le nettoyer un peu principalement sur cette partie:
$.each(data, function(i,item) {
$("#" + item.ID).data(item.ID, {
NAME: item.NAME,
PHONE: item.PHONE,
EMAIL: item.EMAIL,
ADDRESS: item.ADDRESS,
...
...
...
});
}
J'ajoute un tableau d'objets à la valeur de clé. Exemple de http://api.jquery.com/data/ $ ("body"). data ("bar", {myType: "test", count: 40});
Voici ma tentative de le réécrire:
$.each(data, function(i,item) {
$("#" + item.ID).data(item.ID, function(){
$.each(item) {
return i + ":" item[i];
}
})
}
Existe-t-il un moyen plus propre d'écrire cela? J'ai également essayé $ ("#" + item.ID) .data (item.ID, JSON.stringify (data));
Réponses:
2 pour la réponse № 1Si vous voulez juste que l’élément complet soit ajouté, avec toutes ses propriétés, vous pouvez simplement faire ceci:
$.each(data, function(i,item) {
$("#" + item.ID).data(item.ID, item);
});
.data()
prend n'importe quelle valeur, y compris un objet, vous pouvez donc aussi bien utiliser l'original. En outre, il est plus probable que vous souhaitiez ceci:
$.each(data, function(i, item) {
$("#" + item.ID).data("someKey", item);
});
Ensuite, vous pouvez utiliser un .data("someKey")
pour récupérer les données également, plutôt que d'utiliser l'élément propre .id
comme clé de données également.
1 pour la réponse № 2
Vous pouvez juste faire:
$("#" + item.ID).data(item.ID, item);
Vous pourrez toujours accéder aux valeurs comme prévu:
$("#" + someId).data(someId).NAME;
Soit dit en passant, JSON.stringify n'est pas une bonne idée, car pour relire les valeurs, vous devrez le reconvertir à partir d'une chaîne en objet.
1 pour la réponse № 3
Essayer:
$("#" + item.ID).data("info", item);