DataTables数据根据一个值替换为多个列

我正在尝试创建一个条件语句,它不仅会将数据替换为我定位的列,还会替换基于所选目标值的第二个数据。

setTimeout(function() { $('#invoices-table').DataTable({ responsive: true, columnDefs: [{ orderable: false, targets: [-1, -2, -3] }, { targets: 0, // statement is based on first column data render: function(data, type) { // if data in col0 is "1" then replace data in col0 and col5 (pay button) if (type == 'display' && data == '1') { return [ { data: '', target: 0 }, { data: '', target: 5 } ] } else { return [ { data: '', target: 0 } ] } }, }], "lengthMenu": [ [100, 5, 25, 50, -1], [100, 5, 25, 50, "All"] ], dom: 'Bfrtip', initComplete: function() { var api = this.api(); // my actions upon complete } }); }, 1500); // delay is needed due to needed time of mySQL for passing results 

https://codepen.io/anon/pen/jmgBdv?editors=0010

编辑

由于错误的目标号码,在post和codepen上更新了代码

如果您按照上一个答案中的建议查看column.render ,那么您将看到render回调还有一些参数:

 render: function ( data, type, full, meta ) { 

columnDefs每个部分都可以有多个目标,但targets是指列索引 ,而不是数据! 所以你有点错了。 含义是:您可以将相同的结果字符串传递给多个列,即在一个回调中处理具有例如复选框的列 – 但不区分目标(列)和同一columnDefs部分中的不同返回字符串。 这没有多大意义,而且很难实现。

从逻辑上讲,如果您想要不同列的不同值,请使用不同的columnDefs节。 full参数保存行的所有值,因此即使您定位第14列,也可以使用full来检查列#0的值。 这是你应该做的:

 columnDefs: [ { orderable: false, targets: [-1, -2, -3] }, { targets: 0, render: function(data, type) { if (type == 'display') { return data == '1' ? '' : '' } else { return data } } }, { targets: 14, render: function(data, type, full) { if (type == 'display') { return full[0] == '1' ? '' : '' } else { return data } } } ]