¿Existe una mejor práctica general para crear elementos HTML algo complejos en jQuery? Lo intenté de diferentes maneras.jQuery: mejor práctica para crear fragmentos complejos de HTML
Primero trató de usar createElement y encadenar un montón de los que junto con AppendTo y similares:
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");
Esto puede ser duro ya appendTo quiere añadir a cada elemento que cumpla con lo que todo necesita su propio nombre lo contrario se termina subiendo repetidamente por todo el lugar.
Luego he intentado crear una matriz y unirse juntos:
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(''));
Esto parece funcionar bastante bien, aunque en IE cuando yo pondría una alerta ($ (badgeFragment) .text()) por lo general regresó vacío (Esto fue parte de la depuración de un problema más grande). Obviamente estoy un poco nuevo en jQuery (E incluso Javascript en realidad) por lo que para tratar de asegurarse de que esto no era el problema He intentado un tercer método - El gigante de concatenación de cadenas:
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>';
es uno de estos métodos generalmente considerado mejor que los demás? No soy muy bueno con los diferentes perfiladores, así que no estoy seguro de cómo verificarlo yo mismo. También está la cuestión de si todos estos métodos cumplen o no con los navegadores cruzados.
alerta en IE encontró nada porque ".text()" no conseguir todos los contenidos de su sub-árbol DOM. Pruebe $ (badgeFragment) .html() – Pointy