Javascript最简单的模板引擎
2016-12-28 13:15
399 查看
非常简单,性能估计一般,方法最原始。
第二代模板引擎,支持语法
参考:
http://ejohn.org/blog/javascript-micro-templating/
http://www.cnblogs.com/dolphinX/p/3489269.html
实现如下:
源码:https://github.com/easonjim/JavascriptTemplateEngine
bug提交:https://github.com/easonjim/JavascriptTemplateEngine/issues
//第一代模板引擎 //只支持{{key}}的替换,不支持语句 //支持Object和Array对象 function template_setdata(template, data) { try { if (!!data && '[object Array]' == Object.prototype.toString.call(data)) {//数组 var out = ''; for (var obj in data) { var tempout = template; for (var key in data[obj]) { tempout = tempout.replace(/\{\{(\S+)\}\}/g, function (m, i, j) { return (data[obj])[i]; }); } out += tempout; } return out; } else if(!!data && '[object Object]' == Object.prototype.toString.call(data)){//对象 for (var key in data) { template = template.replace(/\{\{(\S+)\}\}/g, function (m, i, j) { return data[i]; }); } return template; } else{//不做处理 return template; } } catch (e) { console.log(e); return template; } } //使用方法: /* html页面的模板: <script type="text/template" id="template_info_content"> <section class="m_article m_list_item m_list_article clearfix"> <a href="{{url}}"> <div class="m_article_img"> <img src="{{img}}" onerror="$(this).attr('src',$ViewBag.ThemeContent+'img/article/article_img1.jpg');"> </div> <div class="m_article_info"> <div class="m_article_title"> <span>{{title}}</span> </div> <div class="m_article_desc clearfix"> <div class="m_article_desc_l"> <span class="m_article_channel">{{classname}}</span> <span class="m_article_time">{{time}}</span> </div> <div class="m_article_desc_r"> <div class="left_hands_desc"> <span class="read_icon"></span>{{pv}} </div> </div> </div> </div> </a> </section> </script> 替换语句: var setdata = { img: '图片', url: '地址', title: '标题', classname: '类别名', time: '时间', pv: '点击数' }; var outhtml = template_setdata($('#template_info_content').html(),setdata); console.log('单对象'+outhtml); var setdatas =[{ img: '图片1', url: '地址1', title: '标题1', classname: '类别名1', time: '时间1', pv: '点击数1' },{ img: '图片2', url: '地址2', title: '标题2', classname: '类别名2', time: '时间2', pv: '点击数2' }]; var outhtml2 = template_setdata($('#template_info_content').html(),setdatas); console.log('数组'+outhtml2);
第二代模板引擎,支持语法
参考:
http://ejohn.org/blog/javascript-micro-templating/
http://www.cnblogs.com/dolphinX/p/3489269.html
实现如下:
//第二代模板引擎 //支持语句,不支持key的替换,全部采用对象进行赋值 function template2_setdata(template, data) { var html=template; /* <#=xxx#> => ');p.push(xxx);p.push(' <# => '); #> => p.push(' * */ var result="var p=[];with(obj){ p.push('" +html.replace(/[\r\n\t]/g," ")//换行去掉 .replace(/<#=(.*?)#>/g,"');p.push($1);p.push('")//<#=xxx#> => ');p.push(xxx);p.push(' .replace(/<#/g,"');")//<# => '); .replace(/#>/g,"p.push('")//#> => p.push(' +" ');}return p.join('');"; var func = new Function('obj',result); return func(setdatas); } /* 使用方法: html页面模板: <script type="text/template" id="template2_info_content"> <ul> <# for ( var i = 0; i < setdatas.length; i++ ) { #> <li><a href="<#=setdatas[i].url#>"><#=setdatas[i].title#></a></li> <# } #> </ul> </script> 替换语句: var setdatas =[{ img: '图片1', url: '地址1', title: '标题1', classname: '类别名1', time: '时间1', pv: '点击数1' },{ img: '图片2', url: '地址2', title: '标题2', classname: '类别名2', time: '时间2', pv: '点击数2' }]; var outhtml3 = template2_setdata($('#template2_info_content').html(),setdatas); console.log(outhtml3); * */
源码:https://github.com/easonjim/JavascriptTemplateEngine
bug提交:https://github.com/easonjim/JavascriptTemplateEngine/issues
相关文章推荐
- 最简单的JavaScript模板引擎
- 最简单的JavaScript模板引擎
- 最简单的JavaScript模板引擎
- Javascript 语言的模板引擎:Mustache简单总结
- 教你使用javascript简单写一个页面模板引擎
- 【原创】javascript模板引擎的简单实现
- 教你使用javascript简单写一个页面模板引擎
- epii.js简约而不简单的JS模板引擎
- Javascript:自己写模板引擎
- 模板引擎freemarker的简单使用教程
- JavaScript templating engine(一个好的JS模板引擎)
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
- doT.js——前端javascript模板引擎问题备忘录
- JavaScript模板引擎的应用场景及实现原理
- 发布一款原创JavaScript模板引擎插件(将html模板快速渲染成数据对应的HTML片段的工具)
- CMS模板引擎系统的开发小结和未来发展的简单构思
- javascript模板引擎——artTemplate
- 如何选择Javascript模板引擎(javascript template engine)?
- MVC模式与模板引擎简单实现
- ETpl——强复用、灵活、高性能的JavaScript模板引擎