Javascript最简单的模板引擎
非常简单,性能估计一般,方法最原始。
//第一代模板引擎 //只支持{{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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!