2011-03-01 165 views
0

我想循环所有匹配的结果,以便它们出现在列表中。我曾尝试使用$('div#comments')。html(commentdata); - 但它只显示数据/第一条评论的第一个匹配项。但增加了再次每次所有的数据我运行的连接请求onClick事件 -jquery循环结果

我然后使用.append代替的.html,这说明所有的意见确定审判。

总之;我如何列出我的所有评论,而不必每次点击加载它们的对象时都添加/添加它们。


var xml = data.responseXML; 

var comments = xml.documentElement.getElementsByTagName("comment"); 

for (var i = 0; i < comments.length; i++) { 

     var user = comments[i].getAttribute("username"); 
     var comm = comments[i].getAttribute("comment"); 
     var commentdata = "<li>"+ user +" - " + comm +"</li>"; 

     $('div#comments').append(commentdata); 

} 

回答

3
var xml = data.responseXML; 

var comments = xml.documentElement.getElementsByTagName("comment"); 

// html collection 
var commentdata = []; 

// open <ul> 
commentdata.push('<ul>'); 

// cache this 
var len = comments.length; 
for (var i = 0; i < len; i++) { 

     var user = comments[i].getAttribute("username"); 
     var comm = comments[i].getAttribute("comment"); 

     // add <li> element 
     commentdata.push("<li>"+ user +" - " + comm +"</li>"); 

} 

// end <ul> 
commentdata.push('</ul>'); 

// update <div id="comments"> contents 
$('div#comments').html(commentdata.join("\n")); 

普利文也是正确的,你可能只是空集装箱开始追加数据之前:

$('div#comments').empty(); 
+0

这演示了每次点击仅操作DOM一次,而不是每次评论一次的好习惯。 :) – Domenic 2011-03-01 18:57:39

+0

排序非常感谢McHerbie! – jhui 2011-03-01 19:17:26

0

你可能会寻找.one()事件连接方法。所以例如

$("#id-of-thing-to-click").one("click", function() { 
    // the code from your post 
}); 

的单击事件将仅被触发第一次有人点击#id-of-thing-to-click,而不是每一次。

+0

你是正确的(错误理解的问题)。我正在删除我的答案。 – 2011-03-01 18:54:39

1
var xml = data.responseXML; 

    var comments = xml.documentElement.getElementsByTagName("comment"); 

// clear previous data here 
    $('div#comments').empty(); 

    for (var i = 0; i < comments.length; i++) { 

      var user = comments[i].getAttribute("username"); 
      var comm = comments[i].getAttribute("comment"); 
      var commentdata = "<li>"+ user +" - " + comm +"</li>"; 

      $('div#comments').append(commentdata); 

    }