jQuery DataTables:rowGroup生成单元格自动跨全列如何解决?
解决DataTable分组行td被自动添加colspan的问题
问题背景
为DataTable配置分组功能后,生成的分组行<td>被自动添加colspan="17"属性,切换分页时该属性会消失,但调整浏览器窗口后又恢复,推测与Responsive扩展有关。配置代码如下:
rowGroup: { startRender: null, endRender: function (rows, group) { var hoursPerGroup = rows .data() .pluck('istarbeit') .reduce( function (a, b) { return a + b; }, 0); hoursPerGroup = $.fn.dataTable.render.number().display(hoursPerGroup); return $('<tr/>') .append('<td>' + group + '</td>') .append('<td>' + hoursPerGroup + '</td>'); }, dataSrc: 'aufnr' }
原因分析
Responsive扩展会根据窗口尺寸动态显示/隐藏列,每次窗口调整时,它会自动计算当前可见列数,并将分组行的<td>的colspan设置为可见列数,这就是colspan反复出现的核心原因。
解决方案
步骤1:修改分组行配置,添加标识类并固定初始colspan
修改rowGroup.endRender方法,给分组行添加自定义类(如custom-group-row),同时明确设置<td>的colspan为你需要的值:
rowGroup: { startRender: null, endRender: function (rows, group) { var hoursPerGroup = rows .data() .pluck('istarbeit') .reduce( function (a, b) { return a + b; }, 0); hoursPerGroup = $.fn.dataTable.render.number().display(hoursPerGroup); // 添加自定义类,同时明确设置colspan return $('<tr/>', { class: 'custom-group-row' }) .append($('<td/>', { text: group, colspan: 1 })) .append($('<td/>', { text: hoursPerGroup, colspan: 1 })); }, dataSrc: 'aufnr' }
步骤2:监听Responsive事件,重置colspan
添加responsive-resize事件监听,在窗口调整后重新设置分组行<td>的colspan:
// 替换成你的表格ID $('#your-table-id').on('responsive-resize', function(e, datatable) { datatable.$('tr.custom-group-row td').attr('colspan', 1); });
额外补充:配合drawCallback确保分页切换后生效
如果分页切换后仍有异常,可添加drawCallback钩子,在表格绘制完成后重置colspan:
$('#your-table-id').DataTable({ // 其他配置项... rowGroup: { /* 上述修改后的分组配置 */ }, responsive: true, drawCallback: function() { this.api().$('tr.custom-group-row td').attr('colspan', 1); } });
内容的提问来源于stack exchange,提问作者izzemon
相关产品推荐
相关产品推荐

