hide: true 是最稳妥的列隐藏方式,初始化即消失、不占空间、不影响排序和数据读取,且仅作用于UI层;动态切换需 setCols + reload(),导出需显式传 cols 参数。

初始化时用 hide: true 最稳
列在第一帧渲染就消失,不占空间、不闪屏、不影响排序和数据读取。必须写成布尔值 true,不是字符串 'true' 或数字 1。
-
hide: true只影响视觉渲染,table.on('tool')回调里d.id等字段照常可取 - 如果列设了
fixed: 'left'或fixed: 'right',hide: true仍生效,但固定区宽度不会自动收缩,必要时手动调table.resize() - 别和
unresize: true混用——隐藏列本身不可拖拽,多写这一项没意义,还可能干扰样式 - 示例:
{field: 'id', title: 'ID', hide: true}
动态切换必须走 setCols + reload()
setCols 只更新内部配置,不触发重绘;漏掉 reload() 就等于白操作。这是最高频错误。
- 必须传入完整
cols数组(不是单列对象),结构要和初始化时一致,否则表头顺序错乱、列宽丢失 - 别用
JSON.parse(JSON.stringify())深拷贝——会丢掉templet函数;现代浏览器优先用structuredClone(),否则手动遍历保留函数引用 -
reload()时不传where和page,表格会回到第 1 页、丢失搜索条件 - 按
field查找列比靠数组索引更可靠,避免加删列后索引偏移
导出 Excel 时 hide: true 不起作用
隐藏只是 UI 层面,导出默认读取原始数据源,所有字段照常输出。这不是 bug,是设计如此。
- 若需导出与视图一致,必须显式传
cols参数:exportExcel({ cols: [{field: 'username'}, {field: 'email'}] }) -
cols中的field名必须和列配置完全一致(大小写敏感),拼错一个字母会导致 Excel 列错位或报错 - 如果表格启用了分页,
table.cache只存当前页数据;要导出全部,得自己请求全量接口再按列过滤 - 别依赖
table.config.xxx.cols——它只存初始化快照,reload()后不会自动更新
千万别用 CSS 或 jQuery 直接隐藏 td/th
用 $("[data-field='id']").hide() 看似快,但会破坏 Layui 内部列对齐逻辑。
- 表头
th和内容行td渲染分离,单独隐藏其中一方会导致横向滚动错位 - 打印、导出、
getSelectData()时该列仍出现,和 UI 表现不一致,容易引发逻辑误判 -
hide: true是唯一能保证列从 DOM、宽度计算、导出逻辑中彻底剔除的方式
reload() 触发重绘,exportExcel({ cols: [...] }) 才真正切断导出路径。


















