因此,我使用fnRowCallback
事件动态计算并插入名为Average
的最后一列中整行的平均值。该列在json.aoColumns
中定义。但是,它不可排序。反正有没有让它可以排序?它显示了排序图标,但是当我点击它时,除了更改排序图标之外它什么也没做。
"fnRowCallback": function (nRow, aaData, iDisplayIndex, iDisplayIndexFull) {
var iRowTotal = 0;
for (var i = 0; i < aaData.length - 2; i++) {
if (aaData[i + 2] != "")
iRowTotal += parseInt(aaData[i + 2], 10);
}
iRowTotal = parseFloat(iRowTotal / (aaData.length - 3)).toFixed(2);
lastColumn = aaData.length - 1;
$('td:eq(' + lastColumn + ')', nRow).html(iRowTotal);
}
答案 0 :(得分:1)
当您向DOM注入数据时,DataTables不会神奇地更新其内部结构。您必须通过dataTables自己的方法,例如fnUpdate
。我还建议您使用fnCreatedRow
回调代替fnRowCallback
,因为fnRowCallback
不提供实际的行索引。
以下是在最后一列中插入随机数的示例:
var dataTable = $('#example').dataTable({
sPaginationType: "full_numbers",
fnCreatedRow: function(nRow, aData, iDataIndex) {
var randomNumber = Math.floor(Math.random()*10);
this.fnUpdate(randomNumber, iDataIndex, 4);
}
});
参见演示 - &gt; http://jsfiddle.net/vYyFv/ ..您的代码看起来像这样(未经过测试)
fnCreatedRow: function(nRow, aData, iDataIndex) {
var iRowTotal = 0;
for (var i = 0; i < aaData.length - 2; i++) {
if (aaData[i + 2] != "") iRowTotal += parseInt(aaData[i + 2], 10);
}
iRowTotal = parseFloat(iRowTotal / (aaData.length - 3)).toFixed(2);
var lastColumn = aaData.length - 1;
this.fnUpdate(iRowTotal, iDataIndex, lastColumn);
}
注意,上面的小提琴是dataTables v1.9.4。