如何配置DataTables实现打印时自动隐藏指定列?
解决DataTables打印时隐藏指定列的问题
一、修复初始隐藏列打印时显示的问题
直接通过style="display:none;"隐藏列,DataTables的打印插件不会自动识别这种DOM层面的隐藏逻辑。更可靠的方式是在DataTables初始化时,通过columns.visible配置标记列的可见性,打印插件会默认排除标记为不可见的列:
$('#your-table-id').DataTable({ columns: [ { visible: false }, // 第一列隐藏 { visible: false }, // 第二列隐藏 { visible: true }, // 第三列及后续列正常显示 // 其他列配置... ] });
若必须保留style="display:none;"的隐藏方式,可在打印按钮的exportOptions中明确排除页面隐藏列:
$('#your-table-id').DataTable({ buttons: [ { extend: 'print', exportOptions: { columns: ':not(:hidden)' // 仅包含页面可见列 } } ] });
二、打印时自动隐藏前两个可见列
无需用户手动操作,可通过以下两种方式实现打印时自动隐藏页面上的前两个可见列:
方法1:通过exportOptions.columns过滤列
利用回调函数判断列是否属于可见列的前两个,仅保留其余列:
$('#your-table-id').DataTable({ buttons: [ { extend: 'print', exportOptions: { columns: function (columnIndex) { // 获取表格所有可见列的索引数组 const visibleColumnIndexes = $('#your-table-id').DataTable().columns(':visible').indexes().toArray(); // 排除可见列中的前两个 return !visibleColumnIndexes.slice(0, 2).includes(columnIndex); } } } ] });
方法2:通过customize回调修改打印DOM
直接在打印预览窗口中隐藏前两个可见列的表头和单元格:
$('#your-table-id').DataTable({ buttons: [ { extend: 'print', customize: function (printWindow) { const $table = $(printWindow.document.body).find('table'); // 隐藏表头前两个<th> $table.find('thead th').slice(0, 2).css('display', 'none'); // 隐藏tbody每行的前两个<td> $table.find('tbody tr').each(function() { $(this).find('td').slice(0, 2).css('display', 'none'); }); } } ] });
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

