js微模板引擎

<!DOCTYPE html>
<html>
<head>
	<title>templateEngine</title>
</head>
<body>
<div id="box"></div>

<script type="text/template" id="html">
	<h1><%if(json.status){%>显示<%}%></h1>
	<ul>
		<%for(var index in json.data) {%> 
		<li><a href="index.html?id=<%=json.data[index].id%>"><%=json.data[index].name%></a></li>
		<%}%>
	</ul>
</script>

<script type="text/javascript">
	var html = document.getElementById("html").innerHTML;
	var data = [
		{id:5,name:"zhangsan"},
		{id:9,name:"lisi"},
		{id:13,name2:"wangwu"}
	];
	var json = {status:true,data:data};

	function templateEngine(str,data){
		var fn = new Function("obj","var p=[];"+     //分割<% %>后放入p中最后join
					"with(obj){p.push('"+            //使用with是为了将数据作为局部变量使用
					str.replace(/[\r\t\n]/g," ")     //替换所有的换行符制表符
					.replace(/'/g,"\r")              //全部单引号替换为\r
					.split("<%").join("\t")          //替换所有的<%为\t
					.replace(/\t=(.*?)%>/g,"',$1,'") //替换所有的变量,这里使用,$1,而不是+$1+是为了最后join时候处理变量undefined时为空字符串
					.split("\t").join("');")         //一行代码的结束
					.split("%>").join("p.push('")    //push进p
					.replace(/\r/g,"\\'")            //置换回单引号
					+"');}return p.join('');");
		return data ? fn(data) : fn;
	}

	document.getElementById("box").innerHTML = templateEngine(html,json);
</script>
</body>
</html>

 

转载于:https://my.oschina.net/tongjh/blog/789359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值