Layui 2.8+ 支持列配置项 hide: true 初始化隐藏列,无需额外 JS;动态隐藏须在 table.render 的 done 回调中调用 table.hideCol(),确保渲染完成;导出 Excel 默认包含隐藏列数据,需通过 export.columns 或 exportData 钩子过滤。
layui table 初始化时用 hide 属性控制列显隐
直接在列配置项里加 hide: true 就行,layui 2.8+ 原生支持,不用写额外 js。这个属性会在渲染第一帧就生效,比手动调用 table.hidecol() 更可靠,也避免闪屏。
-
hide: true是列级开关,只影响当前列,不影响其他列的宽度计算和排序功能 - 如果列设置了
fixed: 'left'或fixed: 'right',hide: true依然有效,但固定列隐藏后,剩余固定列会自动重排 - 注意不要和
unresize: true混用——隐藏列本身不可拖拽,但没必要多写这一项 - 示例:
[{field: 'id', title: 'ID', hide: true}, {field: 'username', title: '用户名'}]
动态隐藏列前必须确认表格已渲染完成
如果初始化后用 table.hideCol() 隐藏,常见错误是调用时机太早——比如放在 layui.use(['table'], callback) 的回调里,但没等 table.render() 返回实例就执行了 hideCol,结果无效。
- 正确做法:在
done回调里操作,确保 DOM 和列结构已就绪table.render({elem: '#demo', url: '/api', done: function(res, curr, count) {table.hideCol('id');}}) -
table.hideCol()接收字段名(field值),不是标题文字或索引 - 多次调用
hideCol()不会报错,但重复隐藏同一列无意义;想恢复显示得用table.showCol() - 该方法在 Layui 2.7+ 才稳定,旧版本建议升级或改用
hide: true
隐藏列后导出 Excel 仍包含数据
默认行为是:列隐藏了,但导出时所有字段照常输出。这不是 bug,是设计如此——隐藏只是 UI 层面,数据源没变。
- 如果导出也要过滤,得在
cols配置里单独给export传参:export: {columns: [{field: 'username'}, {field: 'email'}]} - 或者用
exportData钩子手动过滤:exportData: function(data) {return data.map(row => ({username: row.username, email: row.email}));} - 注意:导出列数和表头对不上时,Excel 可能报错或错位,务必保证字段名拼写和
field一致
done 回调的必要性——很多人以为只要模块加载完就能操作表格实例,其实得等 render 真正画完才行。











