如题,无需外部依赖库。
[1].[代码] [JavaScript]代码 跳至 [1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
/**
* Author By Cyrus
* Date 2015-03-11
* Contact xiaodpro@gmail.com
* Sample:
* <code>
* var template = '<table>'
* + '<tr><td>${this.firstCellText}-<?echo(this.firstCellText);?></td>'
* + '<?'
* + ' var arr = [1, 2, 3, 4, 5, 6];'
* + ' for(var i = 0; i < arr.length; i++){'
* + '?>'
* + ' <td>${arr[i]}</td>'
* + '<?'
* + ' }'
* + '?>'
* + '</tr>'
* + '</trable>';
* console.log(marker(template, {firstCellText: 'The first cell content.'}));
* </code>
*/
function
marker(v, m){
function
esc(s){
return
"echo(\""
+ s.replace(/
"/g, '\\"
').replace(/\n/g,
'\\n'
).replace(/\r/g,
'\\r'
) +
"\");"
; };
var
o = [
"var echo=(function(){var a=new Array();return function(s){if(!s)return a.join('');a.push(s);};})();"
],
s = v.split(/(<\?|\?>)/), r = /\$\{[^\}]+\}/g;
for
(
var
i = 0; i < s.length; i++){
var
n = s[i];
if
(n ===
"?>"
)
continue
;
if
(n ===
"<?"
) o.push(s[++i]);
else
{
if
(r.test(n)){
var
nm = n.match(r), ns = n.split(r);
o.push(esc(ns[0]));
for
(
var
j = 0; j < nm.length; j++){
o.push(
"echo("
+ nm[j].replace(/(\$\{|\})/g,
""
) +
");"
);
o.push(esc(ns[j+1]));
}
continue
;
}
o.push(esc(n));
}
}
var
C =
new
Function(o.join(
''
) +
";this._R$=echo;"
);
for
(
var
n
in
m||{})
if
(n !=
"_R$"
) C.prototype[n] = m[n];
return
new
C()._R$();
}
|