Esiste una best practice generale per la creazione di elementi HTML complessi in jQuery? Ho provato diversi modi.jQuery - Best practice per la creazione di complessi frammenti HTML
Per prima cosa ho provato ad utilizzare createElement e concatenamento un sacco di coloro che insieme con appendTo e simili:
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");
Questo può essere agitato dal appendTo vuole aggiungere ad ogni elemento corrispondenti in modo tutto deve il proprio nome altrimenti va a finire per essere aggiunto ripetutamente dappertutto.
Poi ho cercato di creare un array e unendo insieme:
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(''));
Questo sembra funzionare abbastanza bene, anche se in IE quando avrei messo un avviso ($ (badgeFragment) .text()) di solito è tornato vuoto (Questo era parte del debug di un problema più grande). Sono ovviamente un po 'nuova per jQuery (e anche Javascript realmente) in modo da provare e assicurarsi che questo non era il problema che ho provato un terzo metodo - gigante concatenazione di stringhe:
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>';
è uno di questi metodi in generale considerato migliore degli altri? Non sono molto bravo con i vari profiler, quindi non sono sicuro di come verificarlo da solo. C'è anche la questione di sapere se tutti questi metodi sono compatibili con il cross browser.
tua allerta in IE si avvicinò vuoto perchè ".text()" non ottenere tutti i contenuti del tuo sottostruttura DOM. Prova $ (badgeFragment) .html() – Pointy