2015-01-12 46 views
1

我想清除LI標記的以前的數據。Jquery命令除appendTo

是否有另一個命令將工作,而不是appendTo?

這裏是我的代碼目前的樣子:

var obj = JSON.parse(data); 
$.each(obj, function(index, item) 
{ 
    $('<li>'). 
    text(item.datestamp+' - '+item.comment). 
    appendTo($('#pCodeComment')); 
}); 

我不是很久以前問過類似的問題。我只想知道是否有除appendTo之外的另一個命令將清除以前的數據。

請幫忙。

+3

在這種情況下,您最好使用.empty來清空目標。但是,這是沒有意義的,因爲你正在循環做這個......我想,除非你在循環之前清空它。 –

+0

@KevinB - 好眼睛,如果你在每次迭代中刪除內容,循環就會混淆它。 – adeneo

+1

換句話說,只需'$('#pCodeComment')。empty()'在'$ .each'之前# – adeneo

回答

2

你應該在循環填充它之前清空列表,然後繼續做你已經在做的事情。

var obj = JSON.parse(data); 
$('#pCodeComment').empty(); 
$.each(obj, function(index, item) 
{ 
    $('<li>'). 
    text(item.datestamp+' - '+item.comment). 
    appendTo($('#pCodeComment')); 
}); 

和優化一點點後:

var obj = JSON.parse(data); // i'm assuming `obj` is an array 
var htmlToInsert = obj.map(function (item) { 
     return '<li>' + item.datestamp + ' - ' + item.comment + '</li>'; 
    }).join(''); 
$('#pCodeComment').html(htmlToInsert); 

注:以上是容易被XSS。請參閱this so question以解決問題,或只使用原件。

+0

您可能想考慮不進行N + 1次選擇。 –

+0

絕對是一個好主意,只是不想改變與答案無關的代碼。我會更進一步,生成一個純文本的html字符串,並用.html在一個步驟中插入/全部清空。 –

+1

這個新版本有一箇舊版本沒有的XSS漏洞。如果item.comment包含例如。 –

0
$.replaceWith() 

可能是你在找什麼,或者凱文·乙指出

$.html() 

replaceWith需要選擇替代的元素。而html將填充父元素以插入新的dom片段。