【问题标题】:How to append row data to table one by one?如何将行数据一一追加到表中?
【发布时间】:2015-10-13 18:01:27
【问题描述】:

这是我的html代码

    <tr id="tHead">
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>

这是我的js代码

$(document).ready(function(){
    $.ajax({
        url: "data.json",
        dataType: "json",
        success: function(obj) {
            for(i=0;i<obj.data.length;i++){
                $("#tHead").after("<tr>" +
                 "<td>" + obj.data[i].name1 +
                 "</td><td>" + obj.data[i].name2 + 
                 "</td><td>" + obj.data[i].name3 + 
                 "</td><td>" + obj.data[i].name4 + 
                 "</td><td>" + obj.data[i].name5 + 
                 "</td></tr>");
            }
        }
    });
});

现在我可以在“tHead”tr 之后附加数据。 因为我在我的js代码中使用了.after,所以数据行会在“tHead”之后一个接一个地追加,这将使我的第一个数据行成为表中的最后一个。

当我追加它时,我需要第一个数据行将是表上的第一行。 我该怎么做才能使它正确?

我尝试使用 .append 但不起作用,新行将直接附加在“tHead”行的末尾。

【问题讨论】:

  • 使用反向循环,for (i = obj.data.length -1; i &gt;= 0; i--) {

标签: javascript jquery html


【解决方案1】:

您只需在父表上使用.append(),而不是在#tHead 上使用.after()

success: function(obj) {
    for(var i = 0; i < obj.data.length; i++) {
        $("#tHead").parent("table").append("<tr>" +
         "<td>" + obj.data[i].name1 +
         "</td><td>" + obj.data[i].name2 + 
         "</td><td>" + obj.data[i].name3 + 
         "</td><td>" + obj.data[i].name4 + 
         "</td><td>" + obj.data[i].name5 + 
         "</td></tr>");
    }
}

您的行现在将按时间顺序附加。

第二种解决方案是在:last 伪选择器上使用.after() 以及与#tHead 一起使用的.siblings() 选择器。

success: function(obj) {
    for(var i = 0; i < obj.data.length; i++) {
        $("#tHead").siblings("tr:last").after("<tr>" +
         "<td>" + obj.data[i].name1 +
         "</td><td>" + obj.data[i].name2 + 
         "</td><td>" + obj.data[i].name3 + 
         "</td><td>" + obj.data[i].name4 + 
         "</td><td>" + obj.data[i].name5 + 
         "</td></tr>");
    }
}

【讨论】:

    【解决方案2】:

    反转你的循环,它会按你的意愿工作

    $(document).ready(function()
    {
        $.ajax(
        {
           url: "data.json",
           dataType: "json",
           success: function(obj) 
           {
               for(i=obj.data.length-1;i>=0;i--)
               {
                  $("#tHead").after("<tr>" +
                   "<td>" + obj.data[i].name1 +
                   "</td><td>" + obj.data[i].name2 + 
                   "</td><td>" + obj.data[i].name3 + 
                   "</td><td>" + obj.data[i].name4 + 
                   "</td><td>" + obj.data[i].name5 + 
                   "</td></tr>");
               }
            }
        });
    });
    

    【讨论】:

    • 添加一些描述,或删除此答案并将其添加为评论
    • 您也可以在评论中写下相同的内容。 @Diptox
    • @rajeshmpanchal 答案足够短,可以作为评论,并不意味着它不是答案。这是问题的答案,LQ,但也是一个答案。
    【解决方案3】:

    可能是这样的:

    $(document).ready(function(){
      $.ajax({
         url: "data.json",
         dataType: "json",
         success: function(obj) {
    
         $("#tHead").append("<tr>");//----------- open new row.
         obj.forEach(function(row) {
             $("#tHead").append("<td>");
             $("#tHead").append(row);//---------- actual info.  
             $("#tHead").append("</td>");
         });
         $("#tHead").append("</tr>");//---------- close new row.
       }
      }
     });    
    });
    

    可以在此处找到出色的阅读:https://stackoverflow.com/a/9329476/2645091 关于迭代数组的不同方法。

    【讨论】:

    • 这并不能解决问题。 OP 的问题是订单行出现在他的表中。他不希望它们直接出现在#tHead 之下,而是出现在最后一个tr 之后。
    • @NachoDawg 我不同意你的观点。如果您参考这一行“我需要第一个数据行将是表上的第一行,当我追加它时。我该怎么做才能使它正确?”清楚地表明他在问什么。我认为您认为他的代码示例是他的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2018-09-07
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多