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. Enum.GetHashCode()的问题

    先说一下,正常如果代码可以定义成枚举,我是比较倾向于定义成枚举的,类似这样: public enum Gender { /// <summary> /// 男 /// </summa ...

  2. 『U3D学习』破坏神回忆图<二>技能系统

  3. 解决Type 'UnityEngine.Component' does not support slicing

    unity从4.x升级到5.x后部分脚本的编译错误 将animation改成GetComponent.<Animation>()

  4. css伪类选择器及伪元素选择器

    1.类选择器 在css中可以使用类选择器把相同的元素定义成不同的样式.比如: 结果如下: 标题背景未变 2.伪类选择器 类选择器和伪类选择器的区别在于,类选择器我们定义的,而伪类选择器是CSS中已经定 ...

  5. jQuery高级编程

    jquery高级编程1.jquery入门2.Javascript基础3.jQuery核心技术 3.1 jQuery脚本的结构 3.2 非侵扰事JavaScript 3.3 jQuery框架的结构 3. ...

  6. XML 增删查改

    <?xml version="1.0" encoding="utf-8"?> <users> <person name=" ...

  7. LeetCode---Stack && Heap

    402. Remove K Digits 思路:一次判断字符若比栈顶字符大则入栈,若小则pop,同时k--,直到k为0,注意最终k没有减为0或者中途栈为空或者最终结果前面带0的情况 public St ...

  8. MSSQL-实用小工具

    1.创建查询辅助表 create table nums (n int not null) alter table nums add constraint PK_NUMS primary key clu ...

  9. 将类数组arguments转化成数组

    一.将arguments对象绑定到slice方法上 二. 例子: //闭包 二次封装函数 求和 function partialUsingArguments(fn) { var args = Arra ...

  10. PHP入门part4

    字符串函数 strlen(string); 获取字符串的长度,这里的长度是指该字符串的字节长度:!!utf-8里英文字母和符号占1个字节,中文是占3个字节. substr(string,number1 ...