简单的 js 模版引擎
简单的 js 模版引擎
var tplEngine = function(tpl, data) {
    var reg = /<%([^%>]+)?%>/g,
        regOut = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,
        code = 'var r=[];\n',
        cursor = 0;
    var add = function(line, js) {
        js? (code += line.match(regOut) ? line + '\n' : 'r.push(' + line + ');\n') :
            (code += line != '' ? 'r.push("' + line.replace(/"/g, '\\"') + '");\n' : '');
        return add;
    }
    while(match = reg.exec(tpl)) {
        add(tpl.slice(cursor, match.index))(match[1], true);
        cursor = match.index + match[0].length;
    }
    add(tpl.substr(cursor, tpl.length - cursor));
    code += 'return r.join("");';
    return new Function(code.replace(/[\r\t\n]/g, '')).apply(data);
};
var template = `
My skills:
<%if(this.showSkills) {%>
  <%for(var index in this.skills) {%>
    <a href="#"><%this.skills[index]%></a>
  <%}%>
<%} else {%>
  <p>none</p>
<%}%>
`
console.log(tplEngine(template, {
    skills: ["js", "html", "css"],
    showSkills: true
}));
简单的 js 模版引擎的更多相关文章
- js模版引擎handlebars.js实用教程——为什么选择Handlebars.js
		
返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...
 - JS模版引擎[20行代码实现模版引擎读后感]
		
曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...
 - js模版引擎handlebars.js实用教程
		
js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...
 - js模版引擎开发实战以及对eval函数的改进
		
简介 前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用,同时也算是之前学习的知识的一种总结吧! 首先我们先了解一下模版引擎的工作原理吧! 1. 模版引擎其实就是将指定标签的内容根 ...
 - js模版引擎handlebars.js实用教程——each嵌套
		
<!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...
 - js模版引擎handlebars.js实用教程——关于HTML编码
		
返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...
 - 使用localstorage及js模版引擎 开发 m站设想
		
目前 m站开发的方式,依然请求完整的html,这样造成的问题就是每次请求的数据量过大过多,在没有wifi的情况下,导致页面打开的速度很慢,耗费的流量也较多:访问m站的多是移动端设备,其浏览器的版本都较 ...
 - Epii.js  一个极其简单的Js模板引擎
		
Epii.js 简约而不简单的Js模板引擎 Epii.js 简约而不简单的JavaScript模板引擎 # 特性 一个轻量级模板引擎,可快速实现数据与ui绑定(数据变动,UI自动变动),快速实现事件绑 ...
 - handlebars.js模版引擎随记
		
前台的模版引擎有许多种,相比较而言 我个人更觉得handlebars更为轻便 首先github上下载自新版本的handelbars.js http://handlebarsjs.com 下载下来之后呢 ...
 
随机推荐
- python read PDF for chinese
			
import sys import importlib importlib.reload(sys) from pdfminer.pdfparser import PDFParser,PDFDocume ...
 - mongodb移除分片和添加分片(转)
			
首先我们要移除的分片之后再次添加此分片时会出现添加失败的情况,需要在添加的分片上登录进行删除此分片之前数据库的历史数据比如testdb,删除分片上的数据库之后就可重新添加此分片到mongos中 1.执 ...
 - 玩转DNS服务器——Bind服务
			
合理的配置DNS的查询方式 实验环境: 虚拟机:VMware® Workstation 15 Pro 均使用NAT连接 网段为192.168.1.0/24 DNS 服务器 ---- Centos ...
 - 从输入 URL 到页面展示到底发生了什么?
			
1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...
 - Qualification Rounds(Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combined)+状态压缩)
			
题目链接 传送门 题意 现总共有\(n\)个题目\(k\)支参赛队伍,已知每个题目各队伍是否会写,现问你能否从题目中选出一个子序列使得每支队伍最多只会写一半的题目. 思路 对于每个题目我们用二进制压缩 ...
 - 安卓Termux安装ssh及jupyter编程
			
软件名称:Termux ssh安装 安装openssh apt update apt install openssh 启动ssh服务 sshd 配置公钥私钥 将电脑的公钥(id_rsa.pub)放入/ ...
 - UVA11424 GCD - Extreme (I)[数论]
			
其实这题我也没太明白... 我们要求 \[ \sum_{i=1}^{N-1}\sum_{j=i+1}^Ngcd(i,j) \] 引理: 我们要求\(gcd(i,j)=k\)的个数,可转化为求\(gcd ...
 - 《基于 UML 的教务系统设计方法研究》论文笔记(十五)
			
标题:基于 UML 的教务系统设计方法研究 时间:2009 来源:太原师范学院 关键词:UML:面向对象:建模:教务管理系统. 二.研究内容 UML 建模 UML 涵盖了面向对象的分析.设计和实现,融 ...
 - wordpress调用指定post type文章怎么操作
			
我们有时会用wordpress创建好几种post type文章,比如默认的post文章和product文章,如果我们要在每个页面的底部调用post type类型为post最新文章要如何操作呢?那我们就 ...
 - 1129. Shortest Path with Alternating Colors
			
原题链接在这里:https://leetcode.com/problems/shortest-path-with-alternating-colors/ 题目: Consider a directed ...