DataTables按名称访问列或从服务器返回额外数据

时间:2018-05-20 11:39:06

标签: jquery datatables

我正在尝试使我的DataTables函数通用,因此它适用于我网站上的任何表格。

我想根据“状态”列为我的行的背景着色,该列将出现在我的所有表格中。我现在唯一可以为行着色的方法是通过索引访问数据数组。我需要一种方法来按名称而不是数组索引来访问列。

下面的代码有效,根据agent.parameters中的值添加“绿色”或“红色”类,但有没有办法可以在aData[6]中查找值?

php at'https://www.example.com/table-data'返回一个数组:

aData['status']

jQuery初始化DataTables:

return array('data' => array(...., ..., ....));

另一种可能性是从服务器传回一些额外的数据,这样我就可以告诉fnRowCallback函数查找哪个列的状态。

如果我从服务器传回一个数组,如$('.ajax-data-table').each(function(index) { var table = this.id; // Create ajax table with datatables $(this).dataTable({ processing: true, ajax: { url: 'https://www.example.com/table-data', data: function (d) { d.table = table; } }, deferRender: true, responsive: true, columnDefs: [ {targets: ['no-sort'], bSortable: false}, {targets: ['no-visible'], className: 'never'} ], fnRowCallback: function(nRow, aData, iDisplayIndex) { if (aData[6] == "W") $(nRow).addClass('working'); else if (aData[6] == "C") $(nRow).addClass('closed'); return nRow; } }); }); ,我将如何访问fnRowCallback中的'额外'数据?

更新

我已经设法确认我可以从服务器传回额外的数据,我可以看到使用fnInitComplete:

return array('data' => array(...., ..., ....), 'extra' => 6);

是否可以访问fnInitComplete: function(oSettings, json) { console.log(json.extra); } 中的json.extra数据?如果有办法,我可以使用fnRowCallback

1 个答案:

答案 0 :(得分:0)

为了达到这个目的,我最终得到了一些hacky解决方法。

所以,对于那些寻找类似解决方案的人来说......

  1. 在表格中创建隐藏列
  2. 使用隐藏列的“class”键传回一个关联数组: 例如。 array('class' => 'myClass');
  3. 将以下内容添加到数据表javascript中,以查找具有键名为“class”的关联数组的任何列,并将该值添加到表行类中:

    fnRowCallback:function(nRow,aData,iDisplayIndex){   var className = $ .map(aData,function(elem,index){       if(elem&& elem.class)返回elem.class;   });   //将类添加到行   if(className.length> 0)$(nRow).addClass(className.join(''));   返回nRow; }