自定义简单的JS模板遍历

将Ajax返回来的数据拼成HTML字符串以往常用“ += ”拼接而成,当字符串较长时不方便阅览和修改,想通过模板遍历的方式实现而又不愿为此引入模板引擎JS库,所以自己写了个简单的方法将数据和模板分离。

模板中将变量使用同一前缀加变量名的方式替换,遍历时使用 replace 正则匹配替换成返回的数据。

模板示例:

//模板示例:
var tplli = '<a data-id="item.sid">item.sname</a>';

// 服务端返回的数据格式如:
// {"status":1,"message":"success","data":[{"sid":"1","sname":"test"},{"sid":"2","sname":"test2"}]}
$.getJSON(url, function(res){
	if(res.status == 1){
		if(res.data){
			var s = buildTemplate(res.data, tplli);
			console.log(s);
		}
	}
});


遍历模板的方法:

/**
 * 遍历模板
 * @author Shi Xue
 * @param object data
 * @return string
 */
function buildTemplate(data, tpl){
	var olihtml = '', rval = '';
	if(data){
		$.each(data, function(i, item){
			//正则  g 全局标志
			//这里 function 只能匿名函数, 参数顺序须 $0, $1, ...,$n
			olihtml += tpl.replace(/item\.(\w+)/g, function($0, $1){
							rval = '';
							//不可在 each 中 return
							$.each(item, function(k, val){
								if(k == $1) rval = val;
							});
							return rval;
						});
		});
	}
	return olihtml;
}

关于 replace 正则和匿名函数参数的类似问题,在手册 exec 方法中有说明:
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值