【Javascript】用 js 写一个模板引擎

⭐️ 本文首发自 前端修罗场(点击加入),是一个由 资深开发者 独立运行 的专业技术社区,我专注 Web 技术、Web3、区块链、答疑解惑、面试辅导以及职业发展博主创作的 《前端面试复习笔记》(点击订阅),广受好评,已帮助多人提升实力、拿到 offer。现在订阅,私聊我即可获取一次免费的模拟面试机会,帮你评估知识点的掌握程度,获得更全面的学习指导意见!

模板引擎在前后端都能用到,但是通过作为前端,我们只需要一些简单的模板引擎。

先上代码:

<!DOCTYPE html>
<html>
<head>
	<title>模板引擎</title>
</head>
<body>
	<div id="tpl" type="text/plain">
	    <p>Today: { date }</p>
	    <a href="/{ user.id|safe }">{ user.company }</a>
	</div>
	<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
	<script type="text/javascript">
		var tpl = new Template($('#tpl').html());
		var date= new Date();
		var model = tpl.render({
		    date: date,
		    user: {
		        id: '0000',
		        company: 'babybus'
		    }
		});
		$('#tpl').html(model);
		function Template(tpl) {
		    var
		        fn,
		        match,
		        code = ['var r=[];\nvar _html = function (str) { return str.replace(/&/g, \'&amp;\').replace(/"/g, \'&quot;\').replace(/\'/g, \'&#39;\').replace(/</g, \'&lt;\').replace(/>/g, \'&gt;\'); };'],
		        re = /\{\s*([a-zA-Z\.\_0-9()]+)(\s*\|\s*safe)?\s*\}/m,
		        addLine = function (text) {
		            code.push('r.push(\'' + text.replace(/\'/g, '\\\'').replace(/\n/g, '\\n').replace(/\r/g, '\\r') + '\');');
		        };
		    while (match = re.exec(tpl)) {
		        if (match.index > 0) {
		            addLine(tpl.slice(0, match.index));
		        }
		        if (match[2]) {
		            code.push('r.push(String(this.' + match[1] + '));');
		        }
		        else {
		            code.push('r.push(_html(String(this.' + match[1] + ')));');
		        }
		        tpl = tpl.substring(match.index + match[0].length);
		    }
		    addLine(tpl);
		    code.push('return r.join(\'\');');
		    fn = new Function(code.join('\n'));
		    this.render = function (model) {
		        return fn.apply(model);
		    };
		}
	</script>

</body>
</html>

这个我们能用这个模板引擎创建一个我们前端需要的html片段了。

这里面我们使用正则表达式去匹配字符串中的变量,当然,你要对js正则表达式熟练应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程轨迹_

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值