Datatables使用destroy()时出错:无法在'Node'上执行'insertBefore':插入新节点的节点

时间:2016-11-16 09:43:44

标签: javascript jquery datatables

我如何使用 DataTables

  1. 从数据库中获取数据。
  2. 使用 Underscore.js 模板将数据转换为行对象。
  3. 用表格填充表格的<tbody>
  4. 然后我在我拥有的桌子上初始化数据表。
  5. 问题是当我尝试向表中添加更多行时,我没有使用API​​,所以我只是直接向<tbody>添加行,我希望DataTables 重新加入它自我使用新的<tbody>

    我正在尝试Destroy表格,但会发生的是我收到此错误:

      

    未捕获DOMException:无法在'Node'上执行'insertBefore':The   要插入新节点的节点不是其子节点   这个节点。(...)

    我创建了一个Demo来重现我尝试使用Datatables做的事情,但它没有重现错误......

    以下是我发现的同一错误的问题:
    https://datatables.net/forums/discussion/28081/how-to-update-table-when-dom-changes-destroy-init-crash

2 个答案:

答案 0 :(得分:0)

无需销毁和初始化,只需使用api重绘表

function Repopulate() {
    //...
    //...
    //...
    //init() //remove this line and add the one below
    $("#changeLogTable").DataTables().draw(); 
} 

答案 1 :(得分:0)

您只需在数据表配置中添加&#34;检索&#34;:true,选项。

function init(){
    ruleChangeLogTable = $('#changeLogTable').DataTable({
      //I use destroy because I want to recreate the table with new data.
            "bLengthChange": false,
            "bPaginate": false,
             "retrieve": true,              // this option is added
            "bInfo": false,
            "autoWidth": false,
            "order": [[0, "desc"]],
            "dom": '<"#searchInput"f>',
            "oLanguage": { "sSearch": "" },
            "columns": [ 
            null,
                null,
                null,
                null, 
                 null
            ]
        });
    }

https://datatables.net/reference/option/retrieve了解更多详情,请参阅此

希望这有助于你