javascript
  • jquery
  • 2014-07-03 85 views 2 likes 
    2

    在我写的这个脚本中有些东西没有看到,我想更新/重绘DIV中的表格。我写了这个:使用jquery更新表格

    <div id="e-table"> 
        ... 
    </div> 
    
    <script> 
    
        var tableHeader = '<table class=\"table table-striped\"><thead><tr><th>Date</th><th>Type</th><th>Information</th></tr></thead><tbody>'; 
        var tableFooter = '</tbody></table>'; 
        var table = $("#e-table"); 
    
        function updateEvents() { 
         $.ajax({ 
          url: "/monitor/ajaxEvents", 
          dataType: "json" 
         }).done(function(data) { 
           refreshTable(data); 
         }); 
        } 
    
        function refreshTable(data) { 
         table.html(tableHeader); 
         $.each(data, function(i, item) { 
          table.append("<tr><td>" + item.date + "</td><td>" + item.type + "</td><td>" + "FOO" + "</td></tr>"); 
         }); 
         table.append(tableFooter); 
        } 
    
    
        updateEvents(); 
    </script> 
    

    我保存表部分是恒定的tableHeader和tableFooter中,在一个周期内我追加TD元素,但这是脚本输出一些奇怪的事情:

    <div id="e-table"> 
        <table class="table table-striped"> 
         <thead> 
         <tr> 
          <th>Date</th> 
          <th>Type</th> 
          <th>Information</th> 
         </tr> 
         </thead> 
         <tbody></tbody> 
        </table> 
        <tr> 
         <td>2014-07-03 12:12:00</td> 
         <td>withdrawal</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 12:12:00</td> 
         <td>general</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 12:11:58</td> 
         <td>withdrawal</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 12:11:58</td> 
         <td>general</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 11:33:43</td> 
         <td>withdrawal</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 11:33:43</td> 
         <td>general</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 11:33:42</td> 
         <td>withdrawal</td> 
         <td>FOO</td> 
        </tr> 
        <tr> 
         <td>2014-07-03 11:33:42</td> 
         <td>general</td> 
         <td>FOO</td> 
        </tr> 
    </div> 
    

    我没有明白,为什么tableFooter在打印元素之前打印?

    回答

    3

    .append()将无法​​正常工作像正常的字符串连接,

    做这样的,

    function refreshTable(data) { 
    
    $.each(data, function(i, item) { 
        tableHeader += "<tr><td>" + item.date + "</td><td>" + item.type + "</td><td>" + "FOO" + "</td></tr>" 
    }); 
    
    tableHeader += tableFooter 
    table.html(tableHeader); 
    } 
    
    +1

    +1。 append()方法插入DOM元素,而不是原始代码。 – isherwood

    +0

    他遇到的问题不是因为他错误地添加了。这是因为他将'tr'元素附加到'div'标签。 –

    +0

    这个答案显然是错误的。你仍然将'tableHeader'html添加到div中,而不是实际的表格。 OP,请看看我的答案。 –

    0

    如果你声明

    var table = $("#e-table"); 
    

    你实际上得到的对象的引用,所以当你加入它时,你会追加到该元素,而不是它的孩子。

    有一些方法可以解决这个问题,其中一个就是给tbody一个自己的id,例如,

    var tableHeader = '<table class=\"table table-striped\"><thead><tr><th>Date</th><th>Type</th><th>Information</th></tr></thead><tbody id=\"tableBody\">'; 
        var tableFooter = '</tbody></table>'; 
    

    ,然后获取对象的引用,而不是

    var table = $("#tableBody"); 
    

    (有的收拾可能是一个过于想法在这里,但我希望你得到的基本思想)

    +0

    不能这样做,因为直到脚本完成之后它才会存在于DOM上。因此,jQuery将无法使用var table = $(“#tableBody”);以同样的方法。 –

    +1

    好的。我认为如果表格的赋值发生在表格字符串被追加后发生,这可能会在行被循环之前发生。但是,模糊不清,你的答案就是这里的上级。 +1给你,先生。 – PulseLab

    +0

    感谢您的+1。 :) –

    1

    你使用jQuery来分配ID为'e-table'的'Div'元素添加到名为'table'的变量中。因此,您正在追加'Div'元素。这里是你需要做的,如果你打算使用jQuery ...

    **注意:当你这样做的正确方法时,你的'refreshTable'方法实际上并没有清除内容。如果您真的希望在重新填充之前清空表格,则必须清除所有子元素。

    var table = $('<table></table'); 
    var tableHeader = $('<th></th>') 
             .append($('<tr></tr>') 
               .append($('<th></th>').html('Date')) 
               .append($('<th></th>').html('Information'))); 
    var tableBody = $('<tbody></tbody>'); 
    
    
    function updateEvents() { 
        $.ajax({ 
         url: "/monitor/ajaxEvents", 
         dataType: "json" 
        }).done(function(data) { 
          refreshTable(data); 
        }); 
    } 
    
    function refreshTable(data) { 
        table.append(tableBody); 
        table.append(tableHeader); 
        $.each(data, function(i, item) { 
         tableBody.append("<tr><td>" + item.date + "</td><td>" + item.type + "</td><td>" + "FOO" + "</td></tr>"); 
        }); 
    } 
    
    
    updateEvents(); 
    
    相关问题