- 浏览: 44569 次
- 性别:
- 来自: 深圳
最新评论
简单实用的js模板引擎
不足50行的js模板引擎,支持各种js语法:
<script id="test_list" type="text/html">
<%=
for(var i = 0, l = p.list.length; i < l; i++){
var stu = p.list[i];
=%>
<tr>
<td<%=if(i==0){=%> class="first"<%=}=%>><%==stu.name=%></td>
<td><%==stu.age=%></td>
<td><%==(stu.address || '')=%></td>
<tr>
<%=
}
=%>
</script>
“<%= xxx =%>”内是js逻辑代码,“<%== xxx =%>”内是直接输出的变量,类似php的echo的作用。“p”是调用下面build方法时的k-v对象参数,也可以在调用“new JTemp”时设置成别的参数名
调用:
$(function(){
var temp = new JTemp('test_list'),
html = temp.build(
{list:[
{name:'张三', age:13, address:'北京'},
{name:'李四', age:17, address:'天津'},
{name:'王五', age:13}
]});
$('table').html(html);
});
上面的temp生成以后,可以多次调用build方法,生成html
一下是模板引擎的代码:
var JTemp = function(){
function Temp(htmlId, p){
p = p || {};//配置信息,大部分情况可以缺省
this.htmlId = htmlId;
this.fun;
this.oName = p.oName || 'p';
this.TEMP_S = p.tempS || '<%=';
this.TEMP_E = p.tempE || '=%>';
this.getFun();
}
Temp.prototype = {
getFun : function(){
var _ = this,
str = $('#' + _.htmlId).html();
if(!str) _.err('error: no temp!!');
var str_ = 'var ' + _.oName + '=this,f=\'\';',
s = str.indexOf(_.TEMP_S),
e = -1,
p,
sl = _.TEMP_S.length,
el = _.TEMP_E.length;
for(;s >= 0;){
e = str.indexOf(_.TEMP_E);
if(e < s) alert(':( ERROR!!');
str_ += 'f+=\'' + str.substring(0, s) + '\';';
p = _.trim(str.substring(s+sl, e));
if(p.indexOf('=') !== 0){//js语句
str_ += p;
}else{//普通语句
str_ += 'f+=' + p.substring(1) + ';';
}
str = str.substring(e + el);
s = str.indexOf(_.TEMP_S);
}
str_ += 'f+=\'' + str + '\';';
str_ = str_.replace(/\n/g, '');//处理换行
var fs = str_ + 'return f;';
this.fun = Function(fs);
},
build : function(p){
return this.fun.call(p);
},
err : function(s){
alert(s);
},
trim : function(s){
return s.trim?s.trim():s.replace(/(^\s*)|(\s*$)/g,"");
}
};
return Temp;
}();
核心是将模板代码转变成了一个拼接字符串的function,每次拿数据call这个function。
因为主要是给手机(webkit)用的,所以没有考虑字符串拼接的效率问题,如果需要给IE实用,最好将字符串拼接方法改为Array.push()的形式。
不足50行的js模板引擎,支持各种js语法:
<script id="test_list" type="text/html">
<%=
for(var i = 0, l = p.list.length; i < l; i++){
var stu = p.list[i];
=%>
<tr>
<td<%=if(i==0){=%> class="first"<%=}=%>><%==stu.name=%></td>
<td><%==stu.age=%></td>
<td><%==(stu.address || '')=%></td>
<tr>
<%=
}
=%>
</script>
“<%= xxx =%>”内是js逻辑代码,“<%== xxx =%>”内是直接输出的变量,类似php的echo的作用。“p”是调用下面build方法时的k-v对象参数,也可以在调用“new JTemp”时设置成别的参数名
调用:
$(function(){
var temp = new JTemp('test_list'),
html = temp.build(
{list:[
{name:'张三', age:13, address:'北京'},
{name:'李四', age:17, address:'天津'},
{name:'王五', age:13}
]});
$('table').html(html);
});
上面的temp生成以后,可以多次调用build方法,生成html
一下是模板引擎的代码:
var JTemp = function(){
function Temp(htmlId, p){
p = p || {};//配置信息,大部分情况可以缺省
this.htmlId = htmlId;
this.fun;
this.oName = p.oName || 'p';
this.TEMP_S = p.tempS || '<%=';
this.TEMP_E = p.tempE || '=%>';
this.getFun();
}
Temp.prototype = {
getFun : function(){
var _ = this,
str = $('#' + _.htmlId).html();
if(!str) _.err('error: no temp!!');
var str_ = 'var ' + _.oName + '=this,f=\'\';',
s = str.indexOf(_.TEMP_S),
e = -1,
p,
sl = _.TEMP_S.length,
el = _.TEMP_E.length;
for(;s >= 0;){
e = str.indexOf(_.TEMP_E);
if(e < s) alert(':( ERROR!!');
str_ += 'f+=\'' + str.substring(0, s) + '\';';
p = _.trim(str.substring(s+sl, e));
if(p.indexOf('=') !== 0){//js语句
str_ += p;
}else{//普通语句
str_ += 'f+=' + p.substring(1) + ';';
}
str = str.substring(e + el);
s = str.indexOf(_.TEMP_S);
}
str_ += 'f+=\'' + str + '\';';
str_ = str_.replace(/\n/g, '');//处理换行
var fs = str_ + 'return f;';
this.fun = Function(fs);
},
build : function(p){
return this.fun.call(p);
},
err : function(s){
alert(s);
},
trim : function(s){
return s.trim?s.trim():s.replace(/(^\s*)|(\s*$)/g,"");
}
};
return Temp;
}();
核心是将模板代码转变成了一个拼接字符串的function,每次拿数据call这个function。
因为主要是给手机(webkit)用的,所以没有考虑字符串拼接的效率问题,如果需要给IE实用,最好将字符串拼接方法改为Array.push()的形式。
发表评论
-
ES6 Array常用Api详解
2019-05-06 11:41 4041,Array.of Array.of方法用于将一组值, ... -
JavaScript基础
2019-03-23 21:23 01,数据类型 在JavaScri ... -
gulp
2019-03-21 10:25 0正则路径 https://blog.csdn.net/wi ... -
vue声明周期
2019-02-25 21:51 0vue -
Vue生命周期 VS React生命周期
2019-01-29 11:12 0Vue生命周: beforeCreate: c ... -
JavaScript 对象属性
2019-01-23 10:57 949JavaScript中的对象属性有两种: 一,数据 ... -
JavaScript闭包
2019-01-17 12:02 0要想真正理解闭包首先要先搞清楚作用域和作用域链。 1,作 ... -
常用收藏
2019-01-16 11:11 358参考链接 MongoDB用户权限管理 https:/ ... -
浏览器中进程与线程
2019-01-05 18:06 1222一,首先使用快捷键Shift+Esc打开浏览器Chrome任 ... -
Flex
2018-12-30 15:42 9492009年,W3C提出了一种新的布局方式:Flex布局。 ... -
linux下建立git仓库
2018-12-28 14:51 563参考文件 https://www.cnblogs.com/ ... -
Express中异常处理
2018-12-26 17:36 1327下面内容摘自网络文章,分析的很全面。 文章地址:http ... -
Express中如何使用async/await
2018-12-26 15:31 1261随着Node.js v7.6.0版本开 ... -
查看端口占用
2018-10-09 23:27 513参考:https://www.jianshu.com/p/ ... -
GIt部署到linux服务器
2018-09-30 12:01 951git一键部署代码到远程 ... -
JavaScript中常见继承方式
2018-09-14 18:16 564JavaScript作为弱类型语言,继承也是其强大的特性之 ... -
Node.js版本管理工具nvm
2018-09-09 10:52 600nvm是什么? nvm允许你在同一台机器上安装不同版 ... -
字符编码的发展历史
2018-09-08 09:52 0字符编码的发展历史 Unicode和UTF-8有何区别? ... -
nodejs-buffer
2018-09-07 18:13 0公所周知JavaScript语言不能处理二进制数据,但在服务 ... -
Git学习笔记
2018-09-04 18:07 384----------------------------- ...
相关推荐
本篇文章将深入探讨如何从零开始构建一个简单的JavaScript模板引擎,逐步改进并理解其核心原理。 首先,我们需要理解模板引擎的基本工作流程。模板引擎接受两部分输入:数据和模板。模板通常是一段包含占位符的HTML...
比较简单,又小巧的js模板引擎,非常好用的。
综上所述,tstemplate是一个基于JavaScript模板字符串的简单模板引擎,专为Node.js环境设计,适用于快速、轻量级的服务器端渲染需求。如果需要更复杂的功能或更广泛的应用场景,开发者可能需要寻找其他更成熟的模板...
例如,Mustache和Handlebars是两个流行的JavaScript模板引擎,它们提供了丰富的语法结构,如`{{#if}}...{{/if}}`(条件判断)和`{{#each}}...{{/each}}`(循环遍历数组)。 总的来说,前端模板引擎是前端开发中不可...
4. **Underscore.js/Lodash**:这两个库提供了简单的模板功能,它们的核心是JavaScript utility belt,但同时也包含模板引擎。 5. **Nunjucks**:灵感来源于Django模板语言,提供了一套丰富的模板语言,包括继承、...
JavaScript模板引擎种类繁多,每种都有其独特的特点和适用场景。例如: 1. **Mustache**:这是一种逻辑less的模板引擎,遵循“逻辑不可见”的原则,避免在模板中出现复杂的条件判断和循环。它的语法简洁,跨语言,...
tpl.js是一款轻量级的JavaScript模板引擎,它的设计目标是简单易用。tpl支持基本的模板语法,如变量替换、条件判断和循环,适合小型项目或快速原型开发。 4. BaiduTemplate BaiduTemplate是由百度开发的模板引擎,...
百度JS模板引擎,简称baiduTemplate,是一个由百度公司开发的JavaScript模板引擎,主要用于前端开发中数据与HTML的绑定,实现动态内容的渲染。在1.0.6版中,百度Template进行了重构,修复了定义变量的bug,并且增加...
mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用。 本资源包含了mustache.js 、mustache.min.js包 版本号v2.2.1
**Mustache.js:JavaScript模板引擎详解** Mustache.js,又称为mustache,是一款轻量级且功能强大的模板引擎,专为JavaScript设计。它遵循“逻辑less”的理念,将视图和数据分离,使得代码更易于理解和维护。...
Template.js作为JavaScript模板引擎,具有以下优点: - **简洁的语法**:它的模板语法简单直观,易于学习和使用。 - **高效性能**:通过预编译模板为JavaScript函数,可以在运行时快速生成HTML,提高页面渲染速度。 ...
基于javascript 实现的模板引擎,类似于 Microsoft’s jQuery template plugin,但更简单易用! 标签:Mustache
**基于jQuery开发的JavaScript模板引擎——jTemplates** jTemplates是一个基于jQuery的JavaScript模板引擎,它允许开发者使用HTML标记和简单的语法来创建动态数据驱动的页面。这个强大的工具可以帮助前端工程师将...
总的来说,JavaScript模板引擎是提高前端开发效率的重要工具,它们通过分离数据和视图,使代码更具可读性和可维护性。开发者可以根据项目的需求,从众多模板引擎中挑选最适合的一个,以实现高效、优雅的动态内容渲染...
** Wu_TMPL.js:高性能JavaScript模板引擎概述** `Wu.tmpl.js` 是一款高性能的JavaScript模板引擎,专为Web开发设计,旨在提高前端数据渲染的效率和灵活性。这款开源库允许开发者通过简单的模板语法来生成动态HTML...
总之,ArtTemplate是一款优秀的JavaScript模板引擎,它凭借其出色的性能、安全的渲染方式和简单易用的特性,成为了前端开发者的得力工具。无论是在小型项目还是大型复杂应用中,都能看到ArtTemplate的身影。
Mustache模板引擎的核心特点是其双大括号`{{ }}`语法,用于插入变量或执行简单的逻辑。 在给定的标题"JavaScript的mustache模板引擎的一个极其快速和小的子实现"中,我们可以推断这里提到的是一个轻量级的、高效的...
总结起来,这个20行的JavaScript模板引擎实例展示了如何使用正则表达式解析模板字符串,以及如何通过`Function`构造函数动态生成代码并执行,从而实现了动态数据绑定和简单的逻辑控制。尽管这个简单的实现可能无法...
其次是doT.js,这是一款专为浏览器和Node.js环境设计的JavaScript模板引擎。它提供了强大的模板功能,允许开发者定义块和部分模板,通过使用简单的语法来创建复用的模板片段。doT.js能够很好地处理循环和条件语句,...