js-简单的模板引擎-1.1

 想做一个类似kendoui的模板的东西,在朋友的介绍下,看了篇关于简单的javaScript模板引擎的文章。http://www.cnblogs.com/dolphinX/p/3489269.html。

    想了一下,好像明白了,特来记录一下思路。

 

    首先,比如我需要的内容是,

<ul>
    <li>aa</li>
    <li>bb</li>
</ul>

我想用类似kendoui的这种格式

<script type="text/html" id="user_tmpl">
    <% var obj = ["aa", "bb"] %>
    <ul>
        <% for(var i = 0; i < 2; i++){ %>
            <li><%= obj[i] %></li>
        <% } %>
    </ul>
</script>

然后,如果我是直接用js写,先创建以下的函数,然后调用,往指定的div中追加内容。

///获得模板的字符串
///obj  数据源
///返回 模板的字符串
function GetTemplateStr(obj){
    var p=[];
    with(obj){
        p.push('<ul><li>aa</li><li>bb</li></ul>');
    }
    return p.join('');
}

由于li是根据我们的数据获得的,将上面的代码,改成如下内容,

///获得模板的字符串
///obj  数据源
///返回 模板的字符串
function GetTemplateStr(obj){
    var p=[];
    with(obj){
        var obj = ["aa", "bb"]
        p.push('<ul>');
        for(var i = 0; i < 2; i++){
            p.push('<li>');
            p.push(obj[i]);
            p.push('</li>');
        }
        p.push('</ul>');
    }
    return p.join('');
}

 现在对比两部分代码

var p=[];

with(obj){ 

         p.push('');

         var obj = ["aa", "bb"];           <% var obj = ["aa", "bb"]; %>

         p.push('<ul>');                     <ul>

         for(var i = 0; i < 2; i++){       <% for(var i = 0; i < 2; i++){ %>

                p.push('<li>');               <li>

                p.push(obj[i]);               <%= obj[i] %>

                p.push('</li>');              </li>

         }                                          <% } %>

         p.push('</ul>');                   </ul>

}

return p.join('');

这是js字符串的代码                    这是js模板的代码

对比后可发现

<%             ->  ');

%>             ->  p.push('

<%= A %> ->  '); p.push($1); p.push('     //$1表示A的内容

开头为             var p=[]; with(obj){ p.push('

结尾为             '); } return p.join('');

 

    所以就会有以下方法

///获得模板的字符串
///id   模板的id号
///obj  数据源
///返回 模板的字符串
function tmpl(id,data){
    var html=document.getElementById(id).innerHTML;//获得模板的html代码

    var result=" var p=[];with(obj){p.push(' "
    + html.replace(/[\r\n\t]/g, " ")  //将换行符替换成空格,避免形成的函数报错
    .replace(/<%=(.*?)%>/g, " ');p.push($1);p.push(' ")//替换<%= %>
    .replace(/<%/g, " '); ")          //替换<%
    .replace(/%>/g, " p.push(' ")     //替换%>
    +" ');}return p.join(''); ";      //加结尾
        
    var fn=new Function("obj",result); //创建函数,参数为obj,内容为result
    return fn(data);                   //返回函数的值
}

以后就可以直接用模板创建页面啦,好开森啊。。。

注:如果在js中需要用到参数的内容,请以obj开头

注:如果在js中需要用到参数的内容,请以obj开头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值