Scripts 学盟
标题:
像ASP一样的javascript模板函数
[打印本页]
作者:
混混@普宁.中国
时间:
2012-6-27 23:07:56
标题:
像ASP一样的javascript模板函数
<script id="myTmpl" type="text/tmpl">
<% for (var i=0; i<10; i++) { %>
<ul>
<li class="li1"><span><%=name%></span></li>
<li>电话:<%=tel%></li>
<li>QQ:<a target="_blank" href="http://<%=qq%>.qzone.qq.com/"><%=qq%></a></li>
<li><%=addr%></li>
</ul>
<% } %>
</script>
<script type="text/javascript">
var context = {
"qq" : '78423497'
, "addr": '中国·普宁'
, "name": '混混'
, "tel" : '186812345678'
};
var html = tmpl(document.getElementById('myTmpl').text, context);
document.write(html);
</script>
复制代码
上面是一个使用例子。 看到那模板了么,写过 asp 的人一定不会陌生。
呵呵, 这是如何实现的呢, tmpl 是怎样一个函数呢
!function() {
var cache = {};
window.tmpl = function(strTmpl, args) {
var __argNames = [];
var __argValues = [];
for (var a in args) {
__argNames.push(a);
__argValues.push(args[a]);
}
var funcs = cache[strTmpl] || function() {
var f = [ 'var __out__ = [];' ];
strTmpl.replace(/<%=([\d\D]*?)%>|<%([\d\D]*?)%>|([\d\D]+?)(?=<\%|$)/g, function($0, $1, $2,
$3) {
if ($3) {
f.push('__out__.push(unescape("', escape($3), '"));');
} else if ($1) {
f.push('__out__.push(', $1, ');');
} else if ($2) {
f.push($2, ';');
}
});
f.push('return __out__.join("")');
return new Function(__argNames.join(', '), f.join(''));
}();
cache[strTmpl] = funcs;
return funcs.apply(args||{}, __argValues);
};
}();
复制代码
欢迎光临 Scripts 学盟 (http://www.iscripts.org/)
Powered by Discuz! X2