js模板

来源:互联网 发布:电脑上看淘宝直播 编辑:程序博客网 时间:2024/05/19 10:34
function Template(left,right){    var LEFT = left || '<%';    var RIGHT = right || '%>';    var _arguments = null;    var _params = [];    this.render = function(tpl, data){        _arguments = arguments;        tpl = tpl.replace(/\r\n|\r|\n|\t/g,'').                    //去除注释                    replace(/(<\!\-\-.*[^(?:\-\->)]\-\->)/g,'').                    //转义双引号                    replace(/"/g,'\\"').                    //处理限定符之内的内容                    replace(new RegExp(LEFT+'.*?[^('+RIGHT+')]'+RIGHT,'ig'),function(val){                        return val.replace(/\\"/g,'"').                                    replace(RIGHT,'_temp_arr.push("').                                    replace(new RegExp(LEFT+'(?!=)','img'),'");');                    }).                    //数据输出                    replace(new RegExp('(' + LEFT + '\s{0,}=)(\s{0,}.*?\s{0,})(_temp_arr)', 'img'), '" +$2); _temp_arr') + '"); return _temp_arr.join("");';        tpl = 'var _temp_arr = []; _temp_arr.push("' + tpl;        if(_arguments.length == 1){            return tpl;        }        if(_arguments.length == 2){            return new Function('datas',tpl)(data);        }        return createFunction(tpl);    }    //自定义变量名,数组形式['arg1','arg2',...],值与render(tpl,'arg1的实际值','arg1的实际值',...)对应,    this.setParams = function(params){        _params = params;        return this;    }    function createFunction(tpl){        var size = _arguments.length;        var argsName = [];        var args = [];        for(var i=1; i<size; i++){            var param = _params[i-1] || ('arg'+i);            argsName.push('\"'+param+'\"');            args.push('args['+i+']');        }        var content = 'return new Function('+argsName.join(',')+',tpl)('+args.join(',')+');';        return new Function('tpl','args',content)(tpl,_arguments);    }}

0 0
原创粉丝点击