Datatables.net ajax.reload():如果没有必要,避免重建DOM

时间:2015-10-26 16:51:19

标签: ajax datatables-1.10

我正在使用DataTables.Net JS component从服务器渲染数据(重载在超时时执行)。

如果没有实际更改行,有没有办法避免在ajax.reload()上重建<TR>?我不希望<TR>的自定义类消失。

更新

以下是我初始化组件的方法:

myTable = $('#myTable').dataTable(
{
    'ajax':
    {
        'url': 'data', // Something like http://myserver/data
        'dataSrc': '' // All data go right in the root of JSON.
    }
...

根据DataTable网站上的“多选”示例,我的自定义类如.selected

此致

1 个答案:

答案 0 :(得分:1)

不幸的是,dataTables会清空每个reload()上的表格。因此,排除dataSrc回调中已存在的行是不可能的。

但是你可以自己做AJAX,然后插入新行&#34;手动&#34;如果他们还不存在我假设您正在使用JSON数据源,因此您可以使用JSON.stringify将现有行与新行进行比较。

以下是使用setInterval的示例(包括选择):

var table = $('#example').DataTable({
   select : true, 
   columns : [ 
     { "data" : "id" },
     { "data" : "name" }, 
     { "data" : "lat" }, 
     { "data" : "lon" }]
});

function loadData() {
    $.getJSON('https://api.myjson.com/bins/14t4g', function(json) {
        function rowExists(item) {
            for (var i=0;i<table.data().length;i++) {
                if (JSON.stringify(table.row(i).data()) == JSON.stringify(item)) return true;
            }
            return false;
        }    
        json.forEach(function(item) {
           if (!rowExists(item)) {
              table.row.add(item).draw();
           } else {
              console.log('row already exists', item);
           }     
        })
    });
}    

var test = setInterval(function() {
    loadData()
}, 1000);   

演示 - &gt;的 http://jsfiddle.net/qseeeu43/