layui的模板是个强大的功能,但是现在有个情况。
模板编译会将换行符合替换了,这个对于普通的html没什么影响,网页解析html依然按原来的布局。但对于pre标签,里面的内容也被压缩了。本来格式化好的代码片段被压缩了,显示效果不友好。
pre里面的内容如果是固定的,可以通过参数方式写入或者模板生产完成再写入。
如果是pre里面的内容有layui模板的生成语句,那么选择增加处理避开替换。
我们先提前把pre标签里面的换行符合替换成其他标记,使用正则表达式替换。正则表达式是乱试出来的,也不知道是否完全正确。等生成模板后再将换行变回去。
(?<=\<pre[^>]+\>[^<]*?)([.\n\r]+) //匹配换行 替换自定义标签,我这里用<tplbr> (?<=\<tplbr\>[ ]+)([ ]{1}) //匹配换行后的缩进空格 //有需要处理内容中的空格,自行替换成 //layui官网在线测试用代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <title>layui在线调试</title> <link rel="stylesheet" href="//res.layui.com/layui/dist/css/layui.css?t=1598935358933" media="all"> <style> body{margin: 10px;} .demo-carousel{height: 200px; line-height: 200px; text-align: center;} </style> </head> <body> <script type="text/html" id="barDemo"> <span>12321</span> <pre class="layui-code"> 1341243 12342 134 1234 {{ d.a }} 2143 12341242 </pre> <span>2343</span> </script> <div id="d1"></div> <script src="//res.layui.com/layui/dist/layui.js?t=1598935358933"></script> <script> layui.config({ version: '1598935358933' //为了更新 js 缓存,可忽略 }); layui.use(['laydate', 'laypage', 'layer', 'table', 'carousel', 'upload', 'element', 'slider','laytpl','code'], function(){ var laytpl = layui.laytpl; var getTpl = document.getElementById('barDemo').innerHTML, view = document.getElementById('d1'); var reg1 = new RegExp("(?<=\<pre[^>]+\>[^<]*?)([\n\r]+)", "g"); var reg2 = new RegExp("(?<=\<tplbr\>[ ]+)([ ]{1})", "g"); getTpl = getTpl.replace(reg1,'<tplbr>');//替换换行 //console.log(getTpl); getTpl = getTpl.replace(reg2,' ');//替换空格 //console.log(getTpl); laytpl(getTpl).render({a:'a'}, function(html){ //console.log(html); html=html.replace(/<tplbr>/g,'\r\n');//恢复换行 view.innerHTML = html; }); layui.code(); }); </script> </body> </html>
执行后的效果图。
勉强能接受了,本人能力有限,等以后什么时候再灵感迸发时再补充。