function JzRender(tpl, data) {
// 模版解析 data是对象则返回字符串,是数组则返回字符串数组
if (data instanceof Array) {
var s = [];
for (var i = 0, j = data.length; i < j; i++) {
s.push(JzRender(tpl, $.extend({}, {}, data[i])));
}
return s;
}
return tpl.replace(/\$[A-Za-z0-9_\.\(\)]+\$/gi, function (matchs) {
var rs = matchs.replace(/\$/g, ""); // 找到匹配的字符串
var s = '';
var o = rs.indexOf(')');
if (-1 == o) { // 没有定义需要执行的函数 $argName$
if (-1 == rs.indexOf('.')) {
s = data[rs];
} else {
var aa = rs.split('.'); //只支持一级对象
s = data[aa[0]][aa[1]];
}
} else {
var k = rs.indexOf('(');
var ns = rs.substr(0, k);
var argName = rs.substr(k + 1, o - k - 1);
if (-1 == ns.indexOf('.')) { // 顶级函数 $Func(argName,data)$
s = typeof (window[ns]) == 'function' ? window[ns](data[argName], data) : data[argName];
} else {
var na = ns.split('.'); // 只支持一级对象 $Cls.Func(argName,data)$
s = typeof (window[na[0]][na[1]]) == 'function' ? window[na[0]][na[1]](data[argName], data) : data[argName];
}
}
return (s + "") == "undefined" ? "" : s;
});
} function RenderJson(selector,json) {
// 应用json模版
var tpl = $(selector).html();
var s = [];
for (var o in json) {
if (Object.prototype.hasOwnProperty.call(json, o)) {
s.push(JzRender(tpl, json[o]));
}
}
$(selector).removeClass('hide').html(s.join(''));
s.length = 0;
}

js模版解析的更多相关文章

  1. 使用localstorage及js模版引擎 开发 m站设想

    目前 m站开发的方式,依然请求完整的html,这样造成的问题就是每次请求的数据量过大过多,在没有wifi的情况下,导致页面打开的速度很慢,耗费的流量也较多:访问m站的多是移动端设备,其浏览器的版本都较 ...

  2. js模版引擎handlebars.js实用教程——为什么选择Handlebars.js

    返回目录 据小菜了解,对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是: ...

  3. js模版引擎handlebars.js实用教程——关于HTML编码

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  4. js 模版加载到前端

    js 模版加载到前端 简单有效不高端 配个路由 /js/:filename ,  用 readTemplate 响应请求,前端可以按模块方式直接 require 模板 'use strict' var ...

  5. JS的解析与执行过程

    JS的解析与执行过程 全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处 ...

  6. js模版引擎handlebars.js实用教程——each-基本循环使用方法

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  7. js模版引擎handlebars.js实用教程——each-循环中使用this

    返回目录 <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content=" ...

  8. js模版引擎handlebars.js实用教程——each嵌套

    <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...

  9. js模版引擎handlebars.js实用教程——循环中使用索引

    <!DOCTYPE html> <html> <head> <META http-equiv=Content-Type content="text/ ...

随机推荐

  1. Linux下的网卡驱动程序的编写过程(转)

    工作需要写了我们公司一块网卡的linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来,希 ...

  2. OC 相关

    1.OC runtime的理解[转载] http://www.csdn.net/article/2015-07-06/2825133-objective-c-runtime/1

  3. Nginx-Lua模块的执行顺序

    一.nginx执行步骤 nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读<深入理解nginx:模块开发与架构解析>这本书, ...

  4. ecs CentOS 7 安装 mysql (mariadb)

    检查之前是否已经安装 rpm -qa | grep mariadb 如果已安装,卸载 yum remove mysql mysql-server mysql-libs compat-mysql51 开 ...

  5. rhel 5.8 and 6.4 yum配置

    rhel 5.8 and 6.4 yum配置 6.4 [Packages]name=Packagesenabled=1gpgcheck=0baseurl=file:///iso 5.8 [Packag ...

  6. 依赖注入 – ASP.NET MVC 4 系列

           从 ASP.NET MVC 3.0 开始就引入了一个新概念:依赖解析器(dependence resolver).极大的增强了应用程序参与依赖注入的能力,更好的在 MVC 使用的服务和创 ...

  7. 用CorelDRAW等分分割图片的方法

    在CorelDRAW中,想要将图片等分分割可以通过放置容器来实现,根本不需要裁剪工具和辅助线.例如两等分:首先要建立确定等分的份数,建立长方形或正方形.然后把图片放置容器,调整位置,做无缝拼接就可以了 ...

  8. iso 培训笔记

    protocol协议 + 类方法- 实例方法:继承()方法 <> [] 方法调用 .属性:参数mvc storyboard 资源文件info.plist 权限viewcontroller ...

  9. mysql内存使用以及优化中需要的几点注意

    1.从内存中读取数据是微秒级别的.而从磁盘读则是毫秒级别的.二者相差一个数量级.所以想优化数据库,第一个要做到的就是优化io. 2.key_buffer_size[global]设置的内存区域大小缓存 ...

  10. C++中vector的remove用法

      我将从remove的复习开始这个条款,因为remove是STL中最糊涂的算法.误解remove很容易,驱散所有关于remove行为的疑虑——为什么它这么做,它是怎么做的——是很重要的. 这是rem ...