dom Framework实现XML的innerHTML、outerHTML操作
前端的XML真是不毛之地,要什么没什么。
下面是我框架对此处理的相关代码:
var rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, outerHTML = function(el,recursion){ switch(el.nodeType+""){ case "1": var array = []; var nodeName = el.nodeName; if(recursion && el.currentStyle.display == "block"){ array.push("\n") } array.push("<"+nodeName); if(dom.ie67 && el.outerHTML){ var a = el.outerHTML.match(/<(\w+)([^>]*)>/); if(a && a[2]){ array.push(" "+ a[2].trim().split(/\s+/).map(function(el){ var value = el.split("=")[1]; if(value.charAt(0)!=="\""){ el = el.replace(value,value.quote()); } return el; }).join(" ")); } }else{ for(var i=0,t;t=el.attributes[i++];){ array.push(" "+t.name+"="+(t.value||t.specified+"").quote()) } } if(rselfClosing.test(el.nodeName)){ array.push("\/>") }else{ array.push(">"); for(var i=0,c;c=el.childNodes[i++];){ array.push(outerHTML(c,true)) } array.push("<\/"+el.nodeName+">") } return array.join(""); case "3": return el.nodeValue.trim(); case "8": return "<!--"+el.nodeValue+"-->" } }, outerHTML = function(el,xml){//2010.7.2更新 switch(el.nodeType+""){ case "1": return el.xml; case "3": return el.nodeValue.trim(); case "8": return "" } }, innerHTML = function(el){ var array = []; for(var i=0,c;c=el.childNodes[i++];){ array.push(outerHTML(c)) } return array.join(""); } if(document.defaultView){ outerHTML = function(node){ return new XMLSerializer().serializeToString(node).replace(dom.root(node).namespaceURI,"") } innerHTML = function(node){ var s = outerHTML(node), re = new RegExp('<('+node.nodeName+')(?=\\s|>)[^>]*?>([\\s\\S]*?)<\\/\\1>', 'g'); return re.exec(s)[2] } } //============框架源码============== dom.require("xml"); var x = dom.xml("<a><b>iiii</b><eee id='gg' kk='j'><dd>一</dd><dd>二</dd><ll>s</ll></eee></a>"); var eee = x.xml.getElementsByTagName("eee")[0]; alert(innerHTML(eee))
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年