DataTables 将格式添加到数字列中的单元格,使列排序为字符串而不是数字

DataTables add formatting to cell in numeric column makes column sort as a string not a number

我有一个 DataTable,其中有很多列数字。我认为给负数着色会很好,所以我添加了一个渲染函数,如下所示:

{ data: 'mynumbercolumn', 
    render: function(data, type, row) {
        var x = row.mynumbercolumn;
        if (x < 0)
            x = '<span class="text-danger">' + x + '</span>';
        return x;
    }
},

它的工作原理是负数应用了文本危险 class(即它们是红色的)但现在该列按字符串顺序而不是数字顺序排序,所以像这样:

1
1111
111111
2
222

有没有办法将 class 添加到单元格(或以其他方式为负数着色),使数字列仍按数字排序?如果不是,我想我将不得不添加自定义排序(或放弃着色)。

看看 type 参数 https://datatables.net/reference/option/columns.render 你 return 在任何情况下的标记,即不管 typefilterdisplaytype 或排序。在这种情况下,您只想 return 类型为 display 的格式化 HTML 字符串:

render: function(data, type, row) {
  if (type === 'display') {
    var x = row.mynumbercolumn;
    if (x < 0) x = '<span class="text-danger">' + x + '</span>';
    return x;
  } else {
    return data //or row.mynumbercolumn
  }
}

也许更优雅的方法是将 <td> 本身设置为 createdCell回调。像 :

createdCell: function (td, cellData, rowData, row, col) {
  if (cellData < 0) {
    $(td).addClass('text-danger')
  }
}