layui table 单元格默认转义 HTML,需用函数式 templet 返回原生字符串(如 return '' + d.status + ''),确保后端数据未双重编码,且返回值类型为 string,避免 layui.util.escape() 等二次转义。
layui table 单元格默认会转义 HTML 怎么办
直接显示 html 标签内容,本质是绕过 layui 的自动转义机制。它默认把 cellminwidth、templet 等字段里的字符串当纯文本渲染,<strong>加粗</strong> 会变成字面量,而不是加粗效果。
核心解法就一个:用 templet 返回原始 HTML 字符串,并确保不被二次编码。
- 别用字符串模板写死在列配置里(如
templet: '<b>{{d.name}}</b>'),旧版 layui 会把它当字符串再转义一次 - 必须用函数形式的
templet,且返回值是原生字符串(不是 jQuery 对象或 DOM 节点) - 如果数据来自后端,确认字段值本身没被双重 HTML 编码(比如
<span>xxx</span>是错的,应为<span>xxx</span>)
templet 函数里怎么安全返回 HTML
函数体里直接拼接或返回字符串即可,layui 内部会用 innerHTML 插入,不会额外转义。
templet: function(d) {
// ✅ 正确:返回字符串,标签会被解析
return '<span class="layui-badge">' + d.status + '</span>';
// ❌ 错误:返回 jQuery 对象,可能触发异常或不渲染
// return $('<span>' + d.status + '</span>');
// ⚠️ 注意:如果 d.status 本身含用户输入,这里存在 XSS 风险,需自行过滤
}
- 返回值必须是字符串,类型为
string(可用typeof检查) - 避免在字符串中直接拼接未过滤的用户数据,尤其是
d.content这类富文本字段 - 若需复用逻辑,可抽成外部函数,但别返回
document.createElement结果
为什么用了 templet 还是显示源码
常见原因是 HTML 字符被「多转义了一次」——要么后端返回了已编码的字符串,要么前端又调了 layui.util.escape() 或类似工具。
- 检查浏览器 Network → Response,看字段值是不是
<div>...</div>(这是 被编码后的结果) - 排查是否在
parseData或done回调里手动调用了layui.util.escape() - 确认没在
templet里对字段再做一次escape,例如:layui.util.escape(d.html) - 旧版 layui(2.5.x 之前)对某些特殊字符处理不一致,建议升级到 2.8+ 稳定版
表格列宽太小导致 HTML 溢出或换行怎么办
HTML 渲染后可能带内联样式、空格、换行符,影响单元格尺寸计算,尤其 cellMinWidth 不生效时更明显。
- 给列显式设置
minWidth(注意不是cellMinWidth,后者是旧 API,新版推荐用minWidth) - 在
templet返回的 HTML 外层包一层<div style="white-space: nowrap;">...</div>控制换行 - 若内容含长无空格字符串(如 base64、URL),加
style="word-break: break-all;"防止撑破表格 - 避免在
templet里写大段样式,优先用 CSS 类,通过lay-style或全局样式控制
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











