Có cách nào tốt nhất để tạo các phần tử HTML phức tạp trong jQuery? Tôi đã thử một vài cách khác nhau.jQuery - Phương pháp hay nhất để tạo các đoạn HTML phức tạp
Trước tiên tôi cố gắng sử dụng createElement và chaining rất nhiều những cùng với AppendTo và những thứ tương tự:
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");
Đây có thể là thô từ appendTo muốn thêm vào mỗi yếu tố phù hợp để tất cả mọi thứ cần tên riêng của mình nếu không nó kết thúc tăng thêm liên tục khắp nơi.
Sau đó, tôi cố gắng tạo ra một mảng và tham gia nó với nhau:
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(''));
Điều này có vẻ làm việc khá tốt, mặc dù trong IE khi tôi sẽ đặt một cảnh báo ($ (badgeFragment) .text()) nó thường trở lại trống rỗng. (Đây là một phần của việc gỡ lỗi một vấn đề lớn hơn). Tôi rõ ràng là một chút mới để jQuery (và thậm chí Javascript thực sự) để thử và chắc chắn rằng đây không phải là vấn đề tôi đã thử một phương pháp thứ ba - chuỗi khổng lồ nối:
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>';
Là một trong những phương pháp này nói chung được coi là tốt hơn so với những người khác? Tôi không thực sự tốt với các trình biên dịch khác nhau vì vậy tôi không chắc chắn làm thế nào để xác minh điều này bản thân mình. Ngoài ra còn có câu hỏi về việc liệu tất cả các phương pháp này có tuân thủ trình duyệt chéo hay không.
Thông báo của bạn trong IE đã đưa ra sản phẩm nào vì ".text()" không có được tất cả các nội dung của cây con DOM của bạn. Hãy thử $ (badgeFragment) .html() – Pointy