必须用done回调手动接管空态DOM:先清理残留,再向.layui-table-box .layui-table-body内插入带图片的自定义HTML,禁用text.none因它不解析HTML且会转义标签。
搜索后表格无数据时如何替换默认提示
layui 的 table.render() 在 data 为空或 response.count === 0 时,会自动显示“暂无数据”文字,不支持直接插入 html。想显示自定义图片,必须绕过默认空态逻辑,用 css + js 主动接管。
用 done 回调手动控制空态 DOM
done 是表格渲染完成后的回调,此时 DOM 已就位,可安全操作。关键点是:先隐藏原空提示,再向 .layui-table-box .layui-table-body 内插入自定义 HTML。
- 检查
res.count或res.data.length是否为 0,再执行替换 - 务必用
setTimeout延迟执行(10ms 足够),否则 Layui 可能尚未挂载空提示节点 - 插入的容器推荐用
<div class="layui-none">,与 Layui 空态样式一致,避免样式冲突 <pre class="brush:php;toolbar:false;">done: function(res, curr, count){ if (count === 0) { setTimeout(() => { const $body = $('.layui-table-box .layui-table-body'); $body.empty().html(` <div class="layui-none"> @@##@@ <p style="margin-top:10px; color:#999;">没有匹配的数据</p> </div> `); }, 10); } }</pre> <h3>为什么不能用 <code>text: {none: 'xxx'}Layui 的
text.none配置项只接受纯字符串,不解析 HTML 标签。即使写成<img src="/assets/empty.png" alt="暂无结果" style="max-width:90%">,也会被转义为文本显示,无法渲染图片。
anything-to-html下载将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 该字段仅用于国际化文案,设计上就禁用了 HTML 插入
- 试图用
unescape()或innerHTML强行注入会导致 XSS 风险,Layui 本身也做了过滤 - 所以必须放弃配置项,走 DOM 操作路线
注意表格重载(
table.reload())时的空态处理每次调用
table.reload()后,done会再次触发,但原空态 DOM 可能残留。若不清理,多次搜索为空会重复插入,导致多个图片堆叠。- 在
done开头加一句$body.find('.layui-none').remove();预清理 - 如果使用了分页,还要注意:当当前页无数据但总条数 > 0 时(比如翻到末页后删光数据),
count不为 0,但res.data为空 —— 此时应优先判断res.data.length === 0 - 图片路径建议用绝对路径或相对静态资源路径,避免因页面路由变化导致 404










