jQuery Datatables插件,动态创建的最后一列fnRowCallBack上的Average是不可排序的?

时间:2014-03-14 21:41:33

标签: javascript jquery datatables jquery-datatables

因此,我使用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);

                    }

1 个答案:

答案 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。