function prepare(response) {
count++;
//function in another doc
nicetime = handleDate(response.timestamp);
if (response.replydiv=='start'){
var list_name='<div id="chunk">start';
}
else{
var list_name='';
}
if (response.creator!==''){
var list_name=list_name+'<li class="message-list-creator" id="list-'+count+'">'
}
else{
var list_name=list_name+'<li class="message-list" id="list-'+count+'">'
}
var string = ''+list_name+''
+ '<span class="message-list-nick"><a href="statistics.php?user='+response.user+'">'+response.user+'</a></span>'
+ ' <span class="date" id='+response.timestamp+'>'+nicetime+'</span><br>'
+ '<span class="msg">'+response.message+'</span>'
+ '<span class="clear"></span>'
if(response.reply!='null'){
var string = string +'<a message_id="'+response.reply_chunk_id+'" id="reply">reply</a></li>';
}
else {
var string=string+'</li>';
}
if (response.replydiv=='end'){
var string=string +'</div>end';
}
return string;
}
$.getJSON(files+"message.php?action=view&load=initial&topic_id="+topic_id+"&username="+username+"&t=" + (new Date()), function(json) {
if(json.length) {
for(i=0; i < json.length; i++) {
json.sort(function(a,b) { return parseFloat(a.timestamp) - parseFloat(b.timestamp) } );
$('#message-list').prepend(prepare(json[i]));
$('#list-' + count).fadeIn(1500);
}
}
});
答案 0 :(得分:2)
你有一个迷路(并且无法匹敌)</li>
可能会在这部分丢掉你的标记:
+'</li>';
另外,当您使用第一个未关闭的<div>
来调用.prepend()
时,您会遇到问题...这不仅仅是添加HTML而是制作DOM元素,因此您需要将整个HTML字符串放在一起然后.prepend()
它立即出现。
您可以进一步优化这一点,但基本的固定版本将是这样的:
function prepare(response) {
count++;
//function in another doc
var nicetime = handleDate(response.timestamp), string="";
if (response.div=='start'){
string = '<div id="chunk">start div';
}
string += list_name;
string += '<span class="message-list-nick">'+response.message+'</span>';
if (response.div=='end'){
string += '</div>end div';
}
return string;
}
和ajax电话:
$.getJSON(files+"script.php?action=view&load=initial&topic_id="+topic_id+"&username="+username+"&t=" + (new Date()), function(json) {
var output = "";
for(i=0; i < json.length; i++) {
json.sort(function(a,b) { return parseFloat(a.timestamp) - parseFloat(b.timestamp) } );
output += prepare(json[i]);
$('#list-' + count).fadeIn(1500);
}
$('#messagelist').prepend(output);
});
这里的重要区别是,在字符串完成之前我们不会附加到DOM ... jQuery将在第一次调用.prepend()
时立即(或尝试)完成元素。