Предоставление пользовательских классов для каждого TD для стилей - Datatables & jQuery
Я использую datatables для отображения данных на стороне сервера в таблицах.
Я не могу настроить таргетинг и стиль отдельных ячеек (<TD>
). Я немного искал и обнаружил, что это возможно:
"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
....
}
... но я не совсем уверен, потому что у меня есть несколько таблиц и не все имеют одинаковое количество столбцов и строк. Я хочу дать общий класс всем TDs
столбца.
Ответы
Ответ 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');
}
}
);