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))
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
浙公网安备 33010602011771号