DataTables добавляет форматирование к ячейке в столбце цифр c, сортирует столбец как строку, а не как число - PullRequest
1 голос
/ 24 января 2020

У меня есть DataTable со многими столбцами чисел. Я подумал, что было бы неплохо раскрасить отрицательные числа, поэтому я добавил функцию рендеринга, например:

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

Это работает в том смысле, что к отрицательным числам применяется класс текстовой опасности (ie они красным), но теперь столбец сортируется по порядку строк, а не по нумерации, например, так:

1
1111
111111
2
222

Есть ли способ добавить класс в ячейку (или другим способом раскрасить отрицательные числа) таким образом что числовой столбец c все равно будет отсортирован численно? Если нет, мне придется добавить собственную сортировку, я думаю (или откажусь от раскрашивания).

1 Ответ

1 голос
/ 24 января 2020

Взгляните на type параметр https://datatables.net/reference/option/columns.render. Вы возвращаете разметку в любом случае, т.е. независимо от того, type равен filter, display, type или сортировка. В этом случае вы хотите вернуть только отформатированную строку HTML для типа display:

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')
  }
}
...