Laravel DataTables如何避免操作列被打印或导出?
解决方案:DataTables导出/打印时隐藏操作列
问题原因
你添加的data-dt-noprint="true"属性仅对Print按钮生效,无法控制Copy、CSV、Excel、PDF这些导出操作。要实现所有导出/打印场景下隐藏操作列,需要通过DataTables的官方配置统一处理。
方案1:通过列索引排除操作列
找到操作列的索引(从0开始计数,最后一列可用-1表示),在DataTables配置中全局设置导出排除规则:
修改后的DataTables脚本:
$(function() { $("#table-karyawan") .DataTable({ responsive: true, paging: true, lengthChange: false, autoWidth: false, searching: true, ordering: true, info: true, // 全局配置:导出时排除最后一列(操作列) exportOptions: { columns: ":not(:last-child)" }, buttons: [ "copy", "csv", "excel", "pdf", "print" ], }) .buttons() .container() .appendTo("#table-karyawan_wrapper .col-md-6:eq(0)"); });
如果操作列不是最后一列,把:not(:last-child)替换为具体索引,比如操作列是第4列(索引3),则写成:not(:eq(3))。
方案2:通过CSS类排除操作列
给操作列的<td>添加自定义类,比如no-export,然后在配置中排除该类的列:
修改HTML代码:
<td class="no-export" data-dt-noprint="true"> <!-- Tombol Edit --> <a href="{{ route('karyawan.edit', $item->id) }}" class="btn btn-primary btn-sm">Edit</a> <!-- Tombol Hapus --> <form action="{{ route('karyawan.destroy', $item->id) }}" method="POST" style="display: inline-block;" class="form-delete" data-id="{{ $item->id }}"> @csrf @method('DELETE') <button type="submit" class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}">Hapus</button> </form> </td>
修改DataTables脚本:
$(function() { $("#table-karyawan") .DataTable({ responsive: true, paging: true, lengthChange: false, autoWidth: false, searching: true, ordering: true, info: true, exportOptions: { columns: ":not(.no-export)" }, buttons: [ "copy", "csv", "excel", "pdf", "print" ], }) .buttons() .container() .appendTo("#table-karyawan_wrapper .col-md-6:eq(0)"); });
补充说明
如果只想单独控制Print按钮的隐藏效果,保留其他导出的操作列,可以仅给Print按钮配置规则:
buttons: [ "copy", "csv", "excel", "pdf", { extend: "print", exportOptions: { columns: ":not(:last-child)" } } ]
内容的提问来源于stack exchange,提问作者Muhammad Hidayat
相关产品推荐
相关产品推荐

