早上写得1个Template得简单实现。但现在只能实现变量插入,函数调用。想加入if else 判断 for循环,但是正则表达式只是半桶水。没办法做下去。如果能有人补充下去就好了。无比感谢。
<script LANGUAGE="JavaScript">
<!--
Date.prototype.format = function(format){
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) {
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o){
if(new RegExp("("+ k +")").test(format)){
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
}
}
return format;
};
function formatDate(date, format){
var yr = date.substring(0,4);
var mh = date.substring(4,6);
var dy = date.substring(6,8);
var d = new Date();
d.setYear(yr);
d.setMonth(mh-1);
d.setDate(dy);
return d.format(format);
}
function formatMoney(prefix, amount){
return prefix + amount;
}
function add(a,b){
return a+b;
}
function multiply(a,b){
return a*b;
}
var tplText = [
' attr1: ${attr1}\n',
' attr2.attr21: ${attr2.attr21}\n',
' test date : #formatDate(${date}, \'yyyy-MM-dd\') \n',
' test currency: #formatMoney("Y",1000)\n',
' test add : #add(${num1},${num2})\n',
' test multiply : #multiply(#add(30,40), #add(2,3))\n'
].join();
var root = {
attr1 : 'val1',
attr2 : {
'attr21' : 'val21'
},
date : '20080812',
num1 : 10,
num2 : 20
}
function Template(tpl){
this.tpl = tpl;
this.throwUndefError = false;
}
Template.prototype = {
apply : function(dataModel){
var _freg = /#[a-zA-Z0-9]+\(([^\(\)]*)\)/g;
var _vreg = /\$\{([a-zA-Z0-9\.]+)\}/g;
var _root = dataModel;
var fn;
var _msg = [], _isMsg = this.throwUndefError;
while(this.tpl.match(_freg)){
this.tpl = this.tpl.replace(_freg, function(){
fn = arguments[0];
fn = fn.replace(_vreg, function(){
var _value = eval('_root.'+arguments[1]);
if(_value){
if( 'string' == typeof _value ){
return '\''+eval('_root.'+arguments[1]) +'\'';
} else {
return _value;
}
} else if(_isMsg){
_msg.push(arguments[1]+' unexist!');
}
});
fn = fn.substring(1);
return eval(fn);
});
}
this.tpl = this.tpl.replace(_vreg, function(){
var _value = eval('_root.'+arguments[1]);
if(_value){
return eval('_root.'+arguments[1]);
} else if(_isMsg){
_msg.push(arguments[1]+' unexist!');
}
});
if( 0 != _msg.length){
alert('Error:\n'+_msg.join('\n'));
}
return this.tpl;
}
}
var tpl = new Template(tplText);
alert(tpl.apply(root));
//-->
</script>
分享到:
相关推荐
一个简单好用的template模板,可以直接运行使用,比拼接字符串不知道快了多少倍,是一个优雅的方式,看这个demo就知道原理了
而lua-resty-template和大多数模板引擎是类似的,大体内容有: 模板位置:从哪里查找模板; 变量输出/转义:变量值输出...其他:lua-resty-template还提供了不需要解析片段、简单布局、可复用的代码块、宏指令等支持。
spring框架对jdbc的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发 步骤: 1.导入jar包 2.创建JdbcTemplate对象。依赖于数据源DataSource JdbcTemplate template = new jdbcTemplate(ds);
最近在学习一个jquery插件-Json2Template,发现网上现成的例子完整的项目很少,所以自己写了一个
My Simple template class - Alacner 根据discuz的模板原理改成可以单独运用的类,调用简单。
前端开源库-template-string模板字符串,简单模板字符串
template.js 一款 JavaScript 模板引擎,简单,好用。提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果。特性:模版编译,渲染支持所有主流浏览器及Node...
springtemplate,简单操作,存储过程使用总结及例子
vim-template, 用于Vim的简单模板插件 简单Vim模板插件作者:> 对于Vim来说这是一个简单的插件,它允许你为某些文件类型设置一组模板。 在 C/C 报头中添加像警卫这样的样板代码是很有用的,或者是许可免责声明。
lovefc_Template php轻型模板引擎,lovefc_Template中,定义了一个赋值的语法,它的优势在于:lovefc_Template的转换方式不是通过简单的正则匹配,支持其它的目录模板,或者可以是一个文件的路径,另外值得一提的是...
腾讯的一款模板引擎,效率极佳,从此告别html字符串拼接,安全的数据渲染,自动防范xss攻击,只需简单引入即可
space-jekyll-template, 一个简单的spacemacs模板 https 空间 Jekyll基于Spacemacs的一个简单而优雅的。 这个主题在移动设备上也能很好的工作。请看这里的现场演示 。 站点/用户设置在 _config.yml 中自定义站点# ...
一个简单好用的template模板,可以直接运行使用,比拼接字符串不知道快了多少倍,是一个优雅的方式,非常的使用,欢迎使用
vue整合element-ui搭建的简单样板工程,完整性较高,轻量级,核心功能集成,想学vue的可以看看
安装它的最简单方法是使用github上的pip源签出。设置将“ template_graph”添加到设置文件中的INSTALLED_APPS迭代中。 例如: INSTALLED_APPS = ( ... 'template_graph', ...)有条件地在settings.DEBUG上将templat
shell-script-template, 简单( 希望有用) shell script 模板 通用模板 。描述数百万开发人员编写 shell 脚本来解决各种类型的任务。 我使用 shell 脚本简化部署。生命周期管理。安装或者仅仅作为一种粘合剂语言。 ...
responsive-html-email-template, 免费的简单响应HTML电子邮件模板 非常简单的响应HTML电子邮件模板有时你所需要的是一个真正简单的响应HTML电子邮件模板。 就是它.查看实时预览插件。 直接从你的代码库发送电子邮件...
项目介绍 Flask + Layui Fly Template实现的一个社区项目,...Flask + Layui Fly Template实现的一个社区项目,使用flask-admin实现了简单的后台管理功能,数据库使用Mongodb,前台实现功能:用户注册、登录、邮件激活
user authorization-template 1 bind aaa-authorization-template 2001 local-privilege-level 15 exit authentication-template 1 bind aaa-authentication-template 2001 exit user-name admin bind ...