[英]How can insert code in createTextNode
有沒有辦法在“ createTextNod”中插入HTML標記,或者我還能做什么
$.each(JSON.parse(results), function(i, field){
for(var i = 1; i < JSON.parse(results).length; i++) {
var newLi = document.createElement('li');
var textNode = document.createTextNode(field.fname + ' ' + field.lname + ((field.status == 1) ? '<span class="userChatNameOnline">online</span>' : ''));
newLi.appendChild(textNode);
var ul = document.getElementById('ulUsers');
ul.insertBefore(newLi, ul.childNodes[0]);
}
})
OP代碼的以下部分非常糟糕:
$.each(JSON.parse(results), function(i, field){
for(var i = 1; i < JSON.parse(results).length; i++) {...
$.each()
遍歷JSON中的每個field
,這是可以的。 但是您使用了另一個循環,由於$.each()
和for
循環都遍歷數組,因此這是完全不必要的。 這些循環中的每一個在每次迭代時都調用JSON.parse()
。 盡管這有多糟,但是除非您處理大量數據,否則您可能永遠不會注意到任何滯后。
以下是所使用內容的鏈接:
var results = `[{"first":"Kaiser","last":"Soze","status":"1"},{"first":"Darth","last":"Vader","status":"0"},{"first":"Boba","last":"Fett","status":"0"},{"first":"Grim","last":"Reaper","status":"1"},{"first":"zer0","last":"0ne","status":"1"}]`; var JSONData = JSON.parse(results); var list = document.getElementById('users'); $.each(JSONData, function(idx, field) { var name = `[${idx}]: ${field.first} ${field.last}`; var status = `<b class='status' data-status='${field.status}'>${field.status === "1" ? 'Online' : 'Offline'}</b>`; list.insertAdjacentHTML('beforeend', `<li class='userData'>${name} ${status}</li>`); });
#users { width: 50%; list-style: none } .userData { font: 400 16px/1.5 Consolas } .status { float: right } [data-status='1'] { color: green } [data-status='0'] { color: red }
<ul id='users'></ul> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
createTextNode
用於專門創建TextNode,而不是插入HTML。 對於后者,您可以使用innerHTML或insertAdjecentHtml
因為您使用的是jQuery,所以您可能只想使用$()
和.html()
創建節點:
$.each(JSON.parse(results), function(i, field){
var ul = $('#ulUsers');
for (var i = 1; i < JSON.parse(results).length; i++) {
var li = $('<li></li>').html('<span>' + ... + '</span>');
ul.before(li);
}
}
如果您想簡化它,我建議#ulUsers
添加到DocumentFragment,然后將片段的內容附加到#ulUsers
。 如果您傳遞要添加的元素數組,則jQuery會對此進行封裝(當然,如果您希望在將元素添加到列表中時看到列表增長的動態效果,則無需(這樣做)):
$.each(JSON.parse(results), function(i, field){
var ul = $('#ulUsers');
var li_array = [];
for (var i = 1; i < JSON.parse(results).length; i++) {
var li = $('<li></li>').html('<span>' + ... + '</span>');
li_array.push(li);
}
ul.before(li_array);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.