Layui table仅支持二维cols数组实现多级表头,首行用colspan合并,次行列数须与colspan总和对齐且每列必有field;rowspan无效,固定列需置于首行,复杂场景应在done回调中重写thead并调用table.resize。
layui table 原生支持多级表头,但仅限于二维 cols 数组结构 + colspan/rowspan 配置,不支持任意嵌套或动态生成;强行用 children 或三维数组会失效,排序/导出/固定列等功能大概率瘫痪。
cols 二维数组结构必须严格对齐
多级表头本质是「行对齐」:外层数组每项是一行,内层数组每项是一列。Layui 只认两层,多一层就塌陷成单级。
- 第一行写顶层标题,靠
colspan合并列(如{title: '用户', colspan: 2}) - 第二行写具体字段,列数总和必须等于第一行所有
colspan值之和(如第一行colspan: 2+colspan: 3= 5,则第二行必须有且仅有 5 个列配置) - 每一列都得有
field(哪怕只是占位),否则Uncaught TypeError: Cannot read property 'field' of undefined - 不要在第二行及以后设
colspan——Layui 不解析,反而导致后续列丢失
rowspan 和 colspan 的实际行为边界
rowspan 在多级表头中几乎无效:Layui 渲染时只按行顺序平铺 <th>,rowspan 不参与 DOM 结构重建,设了也不跨行显示;真正起作用的只有 colspan,且仅对首行生效。
- 想让「部门」标题垂直跨 3 行?不行。只能靠首行
colspan横向合并,再用第二、三行留空列“模拟”高度 - 如果某列既要
colspan又要rowspan,优先删掉rowspan,否则表头错位 - 固定列(
fixed: 'left')必须放在第一行对应位置;若放在第二行,排序图标会错位、点击无响应
done 回调重写 thead 是最稳的兜底方案
当二维 cols 无法满足(比如三级以上、带样式定制、IE11 兼容),直接在 done 里替换 <thead> HTML 最可靠。
- 先让 layui 正常渲染一次单级表头,拿到
lay-id定位:$('table[lay-id="myTable"] thead') - 构造新 HTML,保留所有原始
data-field和data-key属性(排序/筛选/导出全靠它) - 示例片段:
<tr><th colspan="2">用户</th><th colspan="2">订单</th></tr><tr><th data-field="name">姓名</th><th data-field="age">年龄</th><th data-field="id">ID</th><th data-field="amount">金额</th></tr>
- 执行
$thead.html(newHtml)后,立刻调用table.resize('myTable'),否则滚动时列宽错位
最容易被忽略的是:所有叶子列(最终绑定数据的列)必须设 width,否则在 Chrome/Firefox 下宽度自动收缩,看着像没合并成功;而 IE11 下建议加 skin: 'line' 避免布局抽搐。


















