strToHtml
纯属娱乐,稍微修改一下,可以改成类似一个模板引擎的东西。
var strToHtml = (function(){ var boundaryReg = /[+>]/,relationReg = /[+>]/g,classReg = /\.(\w+)/,idReg=/#(\w+)/,repeatReg=/\*(\d+)/,typeReg=/\:(\w+)/,tagReg = /^\w+/; var h,r; function expand(str){ var node = document.createElement(str.match(tagReg)[0]),c,frag = document.createDocumentFragment(); if(classReg.test(str)) node.className = RegExp.$1; if(idReg.test(str)) node.id = RegExp.$1; if(typeReg.test(str)) node.type = RegExp.$1; if(repeatReg.test(str)){ c = RegExp.$1-0; for(var i=0;i<c;i++){ frag.appendChild(node.cloneNode(true)); }; return frag; }; frag.appendChild(node); return frag; }; function combine(ret,r){ var p,n,g,c; n = ret.pop(); while(ret.length){ p = ret.pop(); g = r.pop(); c = p.childNodes; if(g){ if(g == '>'){ for(var i=0,len=c.length;i<len;i++){ c[i].appendChild(n.cloneNode(true)); }; }; if(g == '+'){ p.appendChild(n); }; n = p; } }; return p; }; return function(str,parent){ if(!str) return ''; var ret =[]; parent = parent || document.body; h = str.split(boundaryReg); r = str.match(relationReg); for(var i=0,len=h.length;i<len;i++){ ret.push(expand(h[i])); }; parent.appendChild(combine(ret,r)); }; })();