简单实用的js模板引擎

转自:微点阅读  https://www.weidianyuedu.com

不足50行的js模板引擎,支持各种js语法:

<script id="test_list" type="text/html"><%= for(var i = 0, l = p.list.length; i < l; i++){ var stu = p.list[i];=%> <tr> <td<%=if(i==0){=%> class="first"<%=}=%>><%==stu.name=%></td> <td><%==stu.age=%></td> <td><%==(stu.address || "")=%></td> <tr> <%= }=%></script>

“<%= xxx =%>”内是js逻辑代码,“<%== xxx =%>”内是直接输出的变量,类似php的echo的作用。“p”是调用下面build方法时的k-v对象参数,也可以在调用“new JTemp”时设置成别的参数名

调用:

$(function(){ var temp = new JTemp("test_list"), html = temp.build( {list:[ {name:"张三", age:13, address:"北京"}, {name:"李四", age:17, address:"天津"}, {name:"王五", age:13} ]}); $("table").html(html);});

上面的temp生成以后,可以多次调用build方法,生成html

一下是模板引擎的代码:

var JTemp = function(){ function Temp(htmlId, p){ p = p || {};//配置信息,大部分情况可以缺省 this.htmlId = htmlId; this.fun; this.oName = p.oName || "p"; this.TEMP_S = p.tempS || "<%="; this.TEMP_E = p.tempE || "=%>"; this.getFun(); } Temp.prototype = { getFun : function(){ var _ = this, str = $("#" + _.htmlId).html(); if(!str) _.err("error: no temp!!"); var str_ = "var " + _.oName + "=this,f=\"\";", s = str.indexOf(_.TEMP_S), e = -1, p, sl = _.TEMP_S.length, el = _.TEMP_E.length; for(;s >= 0;){ e = str.indexOf(_.TEMP_E); if(e < s) alert(":( ERROR!!"); str_ += "f+=\"" + str.substring(0, s) + "\";"; p = _.trim(str.substring(s+sl, e)); if(p.indexOf("=") !== 0){//js语句 str_ += p; }else{//普通语句 str_ += "f+=" + p.substring(1) + ";"; } str = str.substring(e + el); s = str.indexOf(_.TEMP_S); } str_ += "f+=\"" + str + "\";"; str_ = str_.replace(/\n/g, "");//处理换行 var fs = str_ + "return f;"; this.fun = Function(fs); }, build : function(p){ return this.fun.call(p); }, err : function(s){ alert(s); }, trim : function(s){ return s.trim?s.trim():s.replace(/(^\s*)|(\s*$)/g,""); } }; return Temp;}();

核心是将模板代码转变成了一个拼接字符串的function,每次拿数据call这个function。

因为主要是给手机(webkit)用的,所以没有考虑字符串拼接的效率问题,如果需要给IE实用,最好将字符串拼接方法改为Array.push()的形式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值