Layui table 搜索后 emptyText 不生效,因其仅在初始加载无数据时显示;搜索过滤为空需在 done 回调中手动判断 res.data.length 并替换 tbody 内容。
layui table 搜索后空数据时 emptyText 不生效?
因为 emptytext 只在初始加载无数据时显示,搜索过滤后为空,layui 默认不触发该提示。这是最常被误以为“配置错了”的地方。
- 必须配合
done回调手动判断res.data长度,再操作 DOM -
emptyText本身对 filter 后的空状态完全无效,别白费劲配它 - 表格容器(
.layui-table-view)里没有预留空状态占位区,得自己加
如何用 done 回调注入自定义空 HTML
在 table.render() 的 done 函数里检查数据长度,清空原有 tbody,插入自定义 HTML。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 先用
$(elem).next('.layui-table-box').find('.layui-table-body tbody')定位到真实 tbody - 搜索后
res.data是过滤后的结果,直接判res.data.length === 0 - 插入 HTML 前务必清空 tbody,否则旧行残留;用
.html('...')而非.append() - 自定义 HTML 最好带 class(如
layui-table-empty),方便后续样式控制
done: function(res, curr, count) {
const $tbody = $(this.elem).next('.layui-table-box').find('.layui-table-body tbody');
if (res.data.length === 0) {
$tbody.html('<tr><td colspan="' + this.cols.length + '" class="layui-table-empty">未找到匹配项,请调整关键词</td></tr>');
}
}
搜索框绑定和重载时,为什么空状态不更新?
因为搜索通常用 table.reload(),但若没传 where 或没触发服务端重载,done 可能不执行——尤其前端 filter 场景。
- 前端搜索(
data数组已加载完):必须手动调用table.reload()并确保done被触发,或改用table.cache+table.render({ data: filteredData }) - 服务端搜索:确保接口返回
data: [],且done回调存在并执行 - 常见坑:
reload()里漏写done,或把done写在原始 render 里却没同步到 reload 配置中
自定义空 HTML 的样式和交互要注意什么
默认 <td colspan> 单元格会继承表格字体、内边距,但不继承居中或颜色,容易显得突兀。
<ul>
<li>给空提示 td 加 <code>style="text-align: center; padding: 40px 0; color: #999;" 最快见效
<button></button> 或 <a></a> 等可聚焦元素,否则键盘 tab 会卡在空状态里event.stopPropagation() 阻止冒泡,否则可能意外触发行点击事件colspan 值要和实际列数一致,否则错位;可用 this.cols.length 动态取done 回调,或者前端 filter 后压根没走 reload —— 这时候空状态就彻底失联了。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










