构建自己的JavaScript模板小引擎
2024-07-20 00:15:05 223人阅读
有时候,我们不需要太牛逼太强大的JavaScript模板引擎(比如jQuery tmpl或者handlebarsjs),我们只是需要在简单的模板里绑定一些非常简单的字段,本文将使用非常简单的技巧来帮你实现这个小功能。
首先我们先来定义我们需要的模板,在id为template的script块里:前端UI分享
05 | <title>Simple Templating</title> |
09 | <div class= "result" ></div> |
11 | <script type= "template" id= "template" > |
13 | <a href=http://www.mamicode.com/ "{{href}}" > |
17 | <img src=http://www.mamicode.com/ "{{imgSrc}}" alt= "{{title}}" > |
然后,我们需要通过Ajax等其它方式获取所需要的数据,这里为了展示方便,我们使用了自己定义的数组:
01 | var data = http://www.mamicode.com/[ |
03 | title: "Knockout应用开发指南" , |
04 | href: "http://jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0627/281.html" , |
05 | imgSrc: "http://www.jcodecraeer.com" |
08 | title: "微软ASP.NET站点部署指南" , |
09 | href: "http://jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0627/281.html" , |
10 | imgSrc: "http://www.jcodecraeer.com" |
14 | href: "http://jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0627/281.html" , |
15 | imgSrc: "http://www.jcodecraeer.com" |
我们有2种方式来绑定这些数据到模板上,第一种是非常简单的hardcode方法,第二种是自动识别变量式的。
我们先来看第一种方式,是通过替换花括号里的值为data里所对应的值来达到目的:前端UI分享
01 | template = document.querySelector( ‘#template‘ ).innerHTML, |
02 | result = document.querySelector( ‘.result‘ ), |
03 | i = 0, len = data.length, |
06 | for ( ; i < len; i++ ) { |
08 | .replace( /\{\{title\}\}/, data[i].title ) |
09 | .replace( /\{\{href\}\}/, data[i].href ) |
10 | .replace( /\{\{imgSrc\}\}/, data[i].imgSrc ); |
13 | result.innerHTML = fragment; |
第二种方式比较灵活,是通过正则表达式来替换所有花括号的值,而无需一个一个替换,这样相对来说比较灵活,但是要注意模板标签可能在数据里不存在的情况:
01 | template = document.querySelector( ‘#template‘ ).innerHTML, |
02 | result = document.querySelector( ‘.result‘ ), |
06 | attachTemplateToData = http://www.mamicode.com/ function (template, data) { |
12 | function replace(obj) { |
17 | reg = new RegExp( ‘{{‘ + key + ‘}}‘ , ‘ig‘ ); |
18 | t = (t || template).replace(reg, obj[key]); |
24 | for (; i < len; i++) { |
25 | fragment += replace(data[i]); |
31 | result.innerHTML = attachTemplateToData(template, data); |
这样,我们就可以做到,无限制定义自己的标签和item属性了,而无需修改JS代码。
构建自己的JavaScript模板小引擎
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉:
投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。