js模版引擎。

前段时间公司一个同事刚刚做开发的一个博士各种前端问题。

可能还是新入门的小白的思维没有被框住吧,想法挺多的。

上次和他聊天他就提出一个:js拼接字html好麻烦。

后来我仔细想了下干嘛不用html代码作为一个模版来做一个字符串编译成想要的HTML呢。

然后我就用了大概10分钟完成了下面的代码

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="277680701@qq.com">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <script type="text/javascript">
  <!--
		String.prototype.replaceAll = function(s1,s2) { 
			return this.replace(new RegExp(s1,"gm"),s2); 
		}
		String.prototype.template = function(params){
			var html = this.replaceAll('\n',"'+\n'");
			html = html.replaceAll('{{',"'+params['");
			html = html.replaceAll('}}',"']+'");
			return eval("'"+html+"'");
		}

		var $ = function(id){
			return document.getElementById(id);
		}
		function render(){
			var html = $('test').innerHTML.template({'name':'张三','age':15});
			$('output').innerHTML = html;
		}
  //-->
  </script>
 </head>
 <body>
	 <script type="text" id="test">
	 <div style="background:red">
	 姓名:{{name}}
	 </div>
	 <div style="background:green">
	 年龄:{{age}}岁
	 </div>
	 </script>

	 <input type="button" value="渲染模版" οnclick="render()">
	 <div id="output">
	 </div>
 </body>
</html>

页面效果


点击渲染模版之后


刚刚做完之后各种激动啊 然后 想要发布到git去让大家一起用的时候 整个人就斯巴达了,已经有个老外做了个差不多的东西

https://github.com/trix/nano

快哭了他的想法干嘛这么快 而且完成的比我的好多了。

再之后把他的代码偷过来自己改了下

String.prototype.template = function(params){
			return this.replace(/\{{([\w\.]*)\}}/g, function(str, key) {
				var keys = key.split("."), v = params[keys.shift()];
				for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]];
				return (typeof v !== "undefined" && v !== null) ? v : "";
			});
		}

好吧 我承认核心代码完全改成他的了,毕竟人家支持多级json的解析

当然用法和之前的完全一样


不过感觉还是我的使用方法更加的漂亮。

加上script标签的text类型作为模版 整个网站的html代码开启来就舒服多了

下面是代码

js代码


String.prototype.template = function(params){
			return this.replace(/\{{([\w\.]*)\}}/g, function(str, key) {
				var keys = key.split("."), v = params[keys.shift()];
				for (var i = 0, l = keys.length; i < l; i++) v = v[keys[i]];
				return (typeof v !== "undefined" && v !== null) ? v : "";
			});
		}

		var $ = function(id){
			return document.getElementById(id);
		}
		function render(){
			var html = $('test').innerHTML.template({user:{'name':'张三','age':15}});
			$('output').innerHTML = html;
		}
HTML代码
<script type="text" id="test">
	 <div style="background:red">
	 姓名:{{user.name}}
	 </div>
	 <div style="background:green">
	 年龄:{{user.age}}岁
	 </div>
	 </script>

	 <input type="button" value="渲染模版" οnclick="render()">
	 <div id="output">
	 </div>
效果和上面是一样的


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值