Datatables.net ajax.reload():如果不需要,避免重建 DOM

Datatables.net ajax.reload(): avoid rebuilding DOM if not necessary

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

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

更新

这是我初始化组件的方式:

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

根据 DataTable 站点上的 'Multiple selection' 示例,我的自定义 类 例如 .selected

此致,

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

但您可以自己执行 AJAX,并插入新行 "manually"(如果尚不存在)。我假设您正在使用 JSON 数据源,因此您可以使用 JSON.stringify 将现有行与新行进行比较。

这是一个使用 setInterval 的示例(包括 select):

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);   

演示 -> http://jsfiddle.net/qseeeu43/