javascript - jQuery DataTable - 更新值并呈现为 HTML 表格

标签 javascript datatables

我有一个 jQuery DataTable 对象,它保存日志信息——应用程序在特定日期范围内记录了多少条异常、信息等类型的日志消息。我想在将日志消息发送到基础数据库时更新这些值。我目前正在使用 javascript 根据 AppId 查找 HTML 表中的单元格,并使用新的日志总数更新 innerHTML。但是,由于并非所有应用程序都可见,例如如果有 15 个,但表仅设置为显示 10 个条目,我想更新 DataTable 对象中的值,以便在表中包含应用程序时/当应用程序包含在表中时,值是正确的。

我试过通过做这样的事情来改变 DataTable 中的值

var rows = table.rows().data();
var arr = data.aaData;
for (var i = 0; i < arr.length; i++) {
        for (var r = 0; r < rows.length; r++) {
            if (arr[i].ApplicationId == rows[r].AppId) {
                if (arr[i].Debug != 0 || arr[i].Information != 0 || arr[i].Message != 0 || arr[i].Warning != 0 || arr[i].Exception != 0) {
                    //New Exception Count
                    if (arr[i].Exception !== 0) {
                        rows[r].Exception = arr[i].Exception;
                        flash(rows[r].AppId, 'Exception');
                    }
                    //New Warning Count
                    if (arr[i].Warning !== 0) {
                        rows[r].Warning = arr[i].Warning;
                        flash(rows[r].AppId, 'Warning');
                    }
                    //New Message Count
                    if (arr[i].Message !== 0) {
                        rows[r].Message = arr[i].Message;
                        flash(rows[r].AppId, 'Message');
                    }
                    //New Information Count
                    if (arr[i].Information !== 0) {
                        rows[r].Information = arr[i].Information;
                        flash(rows[r].AppId, 'Information');
                    }
                    //New Debug Count
                    if (arr[i].Debug !== 0) {
                        rows[r].Debug = arr[i].Debug;
                        flash(rows[r].AppId, 'Debug');
                    }
                }
            }
        }
    }
    table.draw();

其中 data.aaData 是从 Controller 方法返回的 JSON 格式数据。 将 rows 记录到控制台,我可以看到 DataTable 对象中的值已更新,但这些新值不会在 table.draw() 期间呈现给 HTML 表打电话。

那么有没有人有一种标准的方法来更改 DataTable 中的值?例如,我尝试使用 table.cell(r, 5).data(someNewValue); 但这似乎产生了一些不可靠的结果。

最佳答案

奇怪的是,您对 table.cell(r, 5).data(someNewValue) 的尝试无效。无论如何,你当然可以反过来。这里的关键字是使用 invalidate() .如果我们有一张 table :

<table id="example"></table>

和一些JSON格式的数据

var data = [
    { "name" : "david", "lastname" : "konrad" }
];

像这样初始化数据表

var table = $('#example').DataTable({ 
    data : data,
    columns : [
        { data : "name", title :'name' },
        { data : "lastname", title : 'last name' }
    ]
})

然后您可以通过这种方式更新 data JSON 来更改 dataTable 的内容:

data[0].name = 'sam';
data[0].lastname = 'gregory';

table.row(0).invalidate().draw();

对于特定的行,或者只是

table.rows().invalidate().draw();

对于整个数据集。

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


更新。您可以使用 AJAX 数据源执行与上述完全相同的操作:

$('#example').DataTable( {
  ajax: {
    url: "someUrl",
    dataSrc: function(json) {
       //manipulate the data JSON as you wish
       //in this case, you dont need to invalidate() or draw()
       //...
       return json.data;
    }
})

更新二 表呈现后操作 AJAX 数据。只需将响应 JSON“复制”到您稍后可以操作的变量。变量只是一个引用。一个小例子:

var data;
var table = $("#example").DataTable({
    ajax : {
        url : 'data.json',
        dataSrc : function(json) {
            data = json.data;
            return json.data; 
        }
    },
    columns : [
        { data : 'first_name' }
    ]
})

setTimeout(function() {
    data[0].first_name = 'sam';
    table.row(0).invalidate().draw();
}, 100)

结果与我的第一个示例完全相同。

关于javascript - jQuery DataTable - 更新值并呈现为 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651291/

相关文章:

javascript - Bootstrap 数据表 - jquery onclick 函数在第二页(分页)不起作用

Javascript 整个单词 w

Javascript:DOM、appendChild - 几个问题

javascript - iOS 中使用 javascript 预加载图像

jquery - 有没有办法在 JQuery Datatable 中的标题文本旁边显示排序图标?

datatables - 单击行获取数据对象

javascript - 根据传递的值隐藏 div 元素

javascript - 如何为 React 组件编写 TypeScript 接口(interface)作为另一个组件的静态属性?

javascript - 如何在加载时显示特定子行而不点击

javascript - 为什么服务器端分页不适用于我的 jquery 数据表?