jQuery - les Meilleures Pratiques pour créer des complexes des Fragments de HTML

Est-il un général de meilleures pratiques pour la création de complexes d'éléments HTML en jQuery? J'ai essayé de plusieurs façons différentes.

J'ai d'abord essayé d'utiliser createElement et le chaînage de beaucoup de ceux avec AppendTo et la comme:

var badge = $(document.createElement("div")).attr("class", "wrapper1").appendTo("body");
$(document.createElement("div")).attr("class", "wrapper2").appendTo(".wrapper1");
$(document.createElement("table")).attr("class", "badgeBody").appendTo(".wrapper2");
$(document.createElement("tr")).attr("class", "row1").appendTo(".badgeBody");
$(document.createElement("td")).appendTo(".row1");
$(document.createElement("span")).attr("class", "badgeUnlocked").text("UNLOCKED! ").appendTo("td");
$(document.createElement("td")).attr("class", "badgeTitleText").appendTo(".row1");
$(document.createElement("span")).attr("class", "badgeTitle").text(name).appendTo(".badgeTitleText");
$(document.createElement("tr")).attr("class", "row2").appendTo(".badgeBody");
$(document.createElement("td")).appendTo(".row2");
$(document.createElement("img")).attr("src", imgUrl).appendTo(".row2 td");
$(document.createElement("td")).attr("class", "badgeText").appendTo(".row2");
$(document.createElement("span")).attr("class", "badgeDescription").text(description).appendTo(".badgeText");

Cela peut être rude depuis appendTo veut ajouter à chaque élément correspondant donc tout ce qui a besoin de son propre nom, sinon il finit de s'ajouter à plusieurs reprises toute la place.

Puis j'ai essayé de créer un tableau et de joindre ensemble:

var badgeFragment = [
'<div><div id="'+ closeId+'" class="closeTab">X</div>',
'<div id="'+ badgeId+'" class="wrapper1">',
'<div class="wrapper2">',
'<div class="badgeBody">',
'<div class="badgeImage">',
'<img src="'+ imgUrl +'">',
'</div>',
'<div class="badgeContents">',
'<div class="badgeUnlocked">ACHIEVEMENT UNLOCKED: </div>',
'<div class="badgeTitle">'+ name +'</div>',
'<div id="'+ textId+'" class="badgeDescription">'+ description +'</div>',
'</div>',
'<div style="clear:both"></div>',
'</div></div></div></div></div>',
]

badgeFragment = $(badgeFragment.join(''));

Cela semble fonctionner assez bien, même si dans IE quand j'en ai mis un alert($(badgeFragment).texte()) il habituellement est venu de revenir à vide. (Cela faisait partie de débogage d'un problème plus vaste). Je suis évidemment un peu nouveau pour jQuery (Et même Javascript vraiment) donc, pour essayer et assurez-vous que ce n'était pas le problème, j'ai essayé une troisième méthode - le géant de la concaténation de chaîne:

var badgeFragment =
'<div><div id="'+ closeId+'" class="closeTab">X</div>' +
'<div id="'+ badgeId+'" class="wrapper1">' +
'<div class="wrapper2">' +
'<div class="badgeBody">' +
'<div class="badgeImage">' +
'<img src="C:/Users/Ryan/Documents/icons/crystal_project/64x64/apps/chat.png">' +
'</div>' +
'<div class="badgeContents">' +
'<div class="badgeUnlocked">ACHIEVEMENT UNLOCKED: </div>' +
'<div class="badgeTitle">test</div>' +
'<div id="'+ textId+'" class="badgeDescription">test</div>' +
'</div>' +
'<div style="clear:both"></div>' +
'</div></div></div></div></div>';

Est l'une de ces méthodes généralement considérées comme meilleures que les autres? Je ne suis pas vraiment bon avec les différents profileurs donc je ne suis pas sûr de la façon de le vérifier moi-même. Il y a aussi la question de savoir si oui ou non l'ensemble de ces méthodes sont de la croix-navigateur compatible.

  • Votre alerte IE est venu vide parce que ".text()" ne pas obtenir tout le contenu de votre sous-arbre DOM. Essayez $(badgeFragment).html()
InformationsquelleAutor Ryan Elkins | 2010-02-07