关于js模板的创建、使用,以及{{}}的简单实现


在js里面,经常需要使用js往页面中插入html内容。给script标签设置type="text/template"属性,标签里的内容不会被执行,也不会显示在页面上,但是可以在另外一个script里面通过获取插入到页面上。这样可以把大段的html和js进行分离(摘自 https://blog.csdn.net/appke846/article/details/80066681)。

 

以下是只通过JavaScript来实现的方式。

 

body内的元素:

 1 <div id="div" style="background:green;"></div> 

script标签的模板:

模板1:

1 <script type="text/template" id="div1">
2   <span>这是一个模板</span>
3 </script>

模板2:

1 <script type="text/template" id="div2">
2     <div>数据:{{data}}</div>
3     <div>年龄:{{age}}</div>
4     <div>姓名:{{name}}</div>
5 </script>

JavaScript代码:

1 var div = document.querySelector('#div');
2 var div1 = document.getElementById('div1');
3 var div2 = document.getElementById('div2');

 

对于模板1,可以通过 1 div.innerHTML = div1.innerHTML; 来实现,即将div1内的元素都放入div内(目前未想到其他实现方式)。

实现效果:

 

对于模板2,当需要传入数据时,比如data数据: 1 var data = { data: "123", name: "csdn", age: "xxoo" }; 

这时可以通过正则表达式、replace来实现:

 1 div.innerHTML = div2.innerHTML.replace(/\{\{([\s\S]+?)\}\}/g, function($0, $1) { return data[$1] || ''; }); 

实现效果:

 

为了方便,也可以将其写成一个函数:

 1 /**
 2 * 模板替换
 3 * @param {string} dom 
 4 * @param {json} data 
 5 */
 6 function template(dom, data) {
 7     // /s任何空白字符,包括空格、制表符、换页符等 <=> [ \f\n\r\t\v]
 8     // /S任何非空白字符 <=> [^ \f\n\r\t\v]
12     // 在+/?/*/{min, max}的后面再加上一个?可以开启懒惰模式,正则引擎尽可能少的重复匹配字符
13     var replaceDom = dom.replace(/\{\{([\s\S]+?)\}\}/g, function($0, $1) {
14         return data[$1] || '';
15     });
16     return replaceDom;
17 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM