Подтвердить что ты не робот

Предоставление пользовательских классов для каждого TD для стилей - Datatables & jQuery

Я использую datatables для отображения данных на стороне сервера в таблицах.

Я не могу настроить таргетинг и стиль отдельных ячеек (<TD>). Я немного искал и обнаружил, что это возможно:

"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
    ....
}

... но я не совсем уверен, потому что у меня есть несколько таблиц и не все имеют одинаковое количество столбцов и строк. Я хочу дать общий класс всем TDs столбца.

4b9b3361

Ответ 1

Вы можете использовать параметр sClass в определении столбцов. Например, если у вас есть 3 столбца и вы хотите передать пользовательский класс для второго и третьего столбцов, вы можете:

"aoColumns": [
    null,
    { "sWidth": "95px", "sClass": "datatables_action" },
    { "sWidth": "45px", "sClass": "datatables_action" }
]

Вы можете проверить документацию datatables

Ответ 2

Для тех, кто нашел этот вопрос при поиске fnRowCallback и хотите добавить стиль на основе содержимого ячейки, а не используя статические классы css, использование fnRowCallback сделает трюк:

oTable = $('#matrix').dataTable({
  ...
  "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
    for (var i in aData)  {

      // Check if a cell contains data in the following format:
      // '[state] content'
      if (aData[i].substring(0,1)=='[') {

        // remove the state part from the content and use the given state as CSS class
        var stateName= aData[i].substring(1,aData[i].indexOf(']'));
        var content= aData[i].substring(aData[i].indexOf(']')+1);
        $('td:eq('+i+')', nRow).html(content).addClass(stateName);
      }
    }
  }
});

Надеюсь, это может быть полезно для будущего посетителя: -)

Ответ 3

Вы можете использовать columnDefs для определения классов для каждого столбца.

Пример в coffeescript:

$('table').dataTable(
  columnDefs: [
    {
      targets: -1 # targets last column, use 0 for first column
      className: 'last-column'
    }
  ]
);

Это использует новый API 1.10 +.

Ответ 4

Если вы хотите настроить таргетинг на строку или отдельную ячейку в обратном вызове:

var table = $('#order-history-table').DataTable(
    {
        "ajax": url,
        "pageLength": 20,
        "createdRow": function( row, data, dataIndex ) {

            // Add a class to the cell in the second column
            $(row).children(':nth-child(2)').addClass('text-justify');

            // Add a class to the row
            $(row).addClass('important');
        }
    }
);

Мне не удалось заставить параметр "createdCells" работать, поэтому пришлось делать это через строку.

Ответ 5

Здесь, как это сделать, используя createdCell, используя Синтаксис DataTables 1.10+. Преимущество этого подхода состоит в том, что вы можете условно стилизовать ячейки.

"columnDefs": [
{
        "targets": [16],
        "createdCell": function(td, cellData, rowData, row, col) {
            switch(cellData) {
            case "Pending":
                $(td).addClass('pending');
                break;
            case "Rejected":
                $(td).addClass('rejected');
                break;
            case "Approved":
                $(td).addClass('approved');
                break;
            case "SAP":
                $(td).addClass('sap');
                break;
            case "Reconciled":
                $(td).addClass('reconciled');
                break;
            }
        }
    }
],

Ответ 6

var table = $('#order-history-table').DataTable(
    {
        "ajax": url,
        "pageLength": 20,
        "createdRow": function( row, data, dataIndex ) {
            // Add a class to the cell in the second column
            $(row).children(':nth-child(2)').addClass('text-justify');
            // Add a class to the row
            $(row).addClass('important');
        }
    }
);