要在 layui layer 弹出层中展示带语法高亮的代码块,必须同时满足两个条件:layer 正确加载内容、code 模块在弹出层 DOM 就绪后执行高亮。

要在 layui layer 弹出层中展示带语法高亮的代码块,必须同时满足两个条件:layer 正确加载内容、code 模块在弹出层 DOM 就绪后执行高亮。直接在页面初始化时调用 layui.code() 会失败,因为弹出层内的 pre 元素尚未挂载到 document 中。
弹出层内渲染 pre + layui.code 高亮
这一步适用于 type:1(内嵌 DOM)弹窗,且内容已写死在页面中(如隐藏 div)。
第一步:准备一个带 lay-code 属性的 pre 元素,并包裹在隐藏容器里
function hello() {<br> console.log('layui code works');<br>}
第二步:调用 layer.open,指定 type:1 和 content 为该容器
第三步:在 success 回调中执行 layui.code(),确保 pre 已插入 DOM
这一步不能省略——【lay-code 属性值必须是 highlight.js 支持的标准语言标识,如 javascript/html/json/bash,写 js 或 ts 会失效】
iframe 弹层中实现代码高亮
type:2 弹窗本质是独立页面,需在子页内部完成高亮初始化,父页无法代劳。
方法一:子页 HTML 直接写好 pre + lay-code,并在子页 JS 中调用 layui.code()
<div class="layui-code"></div>
在子页底部(或 DOM 就绪后)执行:
layui.use('code', function(){ layui.code(); });
方法二:若子页使用模板引擎(如 Thymeleaf、Freemarker),确保 pre 标签已由服务端渲染完成,而非 JS 动态插入后再调用 layui.code()——【动态插入的 pre 必须手动指定 elem 参数,否则 layui.code() 找不到新节点】
例如子页 JS 中这样写:
layui.use('code', function(){ layui.code({ elem: 'pre.layui-code' }); });
配合 layedit 在弹层中插入并高亮代码块
当用户通过 layedit 编辑器插入代码片段(比如点击「代码」按钮),再弹出预览层时,需对生成的
内容二次高亮。 <p>① 确保 layedit 输出的 pre 标签带有正确 lay-code 属性。可在 layedit 自定义工具中修改插入逻辑,或提交前用正则补全:</p> <p>const html = layedit.getContent(editIndex);<br>const withCodeAttr = html.replace(/</p><pre class="brush:php;toolbar:false;">([\s\S]*?)/g, '<pre class="layui-code" lay-code="javascript">$1');
② 将处理后的 HTML 作为 type:1 弹层 content 传入
③ 在 layer.success 中立即调用 layui.code(),触发高亮
注意:如果插入的是多语言代码(如含 <script> 和 <style>),建议拆成多个 pre 块并分别标注 lay-code="javascript" 和 lay-code="css",highlight.js 不支持单个 pre 混合识别。</script>











