欢迎来到小懒的博客~email:568705236@qq.com

避免layui模板功能将pre标签的换行符替换

2020/9/25 12:11:28站长

    layui的模板是个强大的功能,但是现在有个情况。

image.png

    模板编译会将换行符合替换了,这个对于普通的html没什么影响,网页解析html依然按原来的布局。但对于pre标签,里面的内容也被压缩了。本来格式化好的代码片段被压缩了,显示效果不友好。

    pre里面的内容如果是固定的,可以通过参数方式写入或者模板生产完成再写入。

    如果是pre里面的内容有layui模板的生成语句,那么选择增加处理避开替换。

    我们先提前把pre标签里面的换行符合替换成其他标记,使用正则表达式替换。正则表达式是乱试出来的,也不知道是否完全正确。等生成模板后再将换行变回去。

(?<=\<pre[^>]+\>[^<]*?)([.\n\r]+)  //匹配换行 替换自定义标签,我这里用<tplbr>
(?<=\<tplbr\>[ ]+)([ ]{1})  //匹配换行后的缩进空格
//有需要处理内容中的空格,自行替换成&nbsp;

//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      &nbsp;&nbsp;&nbsp;&nbsp;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,'&nbsp;');//替换空格
//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>

    执行后的效果图。

image.png

    勉强能接受了,本人能力有限,等以后什么时候再灵感迸发时再补充。

赞赏