DataTable drawCallback如何工作?

时间:2016-07-13 21:00:49

标签: javascript jquery datatables datatables-1.10

我正在尝试使用DENSE_RANK根据CSS单元格对每个DataTable单元格应用drawCallback()。CSS会应用于少数单元格而不是全部单元格。这是JsFiddle我的问题。有人遇到过这个问题并找到了解决方案或有任何想法。请提出建议!

  "drawCallback": function( settings ) {
        var api = this.api();
        var visibleRows=api.rows( {page:'current'} ).data();
        if(visibleRows.length >= 1){
        for(var j=1;j<visibleRows[visibleRows.length -1].length;j++){
          $("td:eq("+j+")", settings.nTBody.childNodes[visibleRows.length -1]).addClass(visibleRows[visibleRows.length -1][j]);
        }
        }
    },

1 个答案:

答案 0 :(得分:3)

就像@charlietfl所说,你真的不想使用drawCallback来格式化行,你可能最好使用createdRow(rowCallback)来进行格式化。

每次绘制事件都会调用

drawCallback,这意味着它实际上意味着用于更新刚添加的行或使用刚刚更新的数据。

另一方面,

createdRow被设计为在创建行时调用,这似乎是您真正想要的。在this documentationexample)中,您可以看到作者显示如何使用此选项将类添加到某些行,这似乎是您最接近您想要执行的操作。

据我所知,你想让每个单元格都有一个与单元格中的文本相同的CSS类(如果我错了,请纠正我)。使用createdRow执行此操作的最简单方法如下:

"createdRow": function ( row, data, index ) {
    for(var i = 0;i<data.length;i++){
        $('td', row).eq(i).addClass(data[i]);
        //The above line assumes that you want to add a CSS class named "red" to a 
        //field that has the text "red" in it, if not, you can change the logic
    }
}

只需将其包含在.DataTables()来电的初始化选项中。

我不得不对哪些类添加到哪些列的确切逻辑做出一些假设,但如果它们是正确的,那么这应该为每个字段添加一个类,该字段的名称与该字段中的文本相同。 / p>