IE用一个节点的outerHTML来获得的代码,与xhtml的代码是不兼容的, 比如,标签名是大写,LI标签没有封口等。
找到一个替换的函数,用来解决这个问题。
function s(h) {
h = h.replace( /< (\ /? )([ ^> \ ! \s] + )(. *? ) >/ gi,r);
/**/ /*
内部函数
功能:
a 将标签名转为小写
b 为无结束符的标签加入 /
c 转换无内容属性:disabled="disabled"
*/
function r() {
var a = arguments;
for ( var i = 0 ;i < a.length;i ++ )
a[i] = a[i] ? a[i]:;
a[ 2 ] = a[ 2 ].toLowerCase();
a[ 3 ] = a[ 3 ].replace( / ([ ^ \s = ] + )\s *= \s * ([ ^ \s " ]+)/gi,$1= " $ 2 " );
a[3]=a[3].replace(/(\S+)/gi,function(a0,a1){if (a1.indexOf(=)<0){return a1.toLowerCase()+= " + a1.toLowerCase() + " }else{return a1;}});
var t=a[2].match(/^(br|hr|input)$/)? " / " : "" ;//自行添加无结束符的标签名
return ( " < " +a[1]+a[2]+a[3]+t+ " > " );
}
h=h.replace(/<(li|p|dd)(.*?)>([\s\S]*?)(?=<\1)/mgi,r1);//修改这里,增加那些会省略闭合标签的元素
/*
内部函数
功能:
恢复被浏览器自动删除的结束符(如果是代码不完整导致的结束符缺失可能无法恢复)
*/
function r1(a0,a1,a2,a3){
var t= " < " +a1+a2+ " > " ;
if (a3.match(new RegExp( " < \\ / " +a1, " i " )))
return t+a3;
return t+a3+ " </ " +a1+ " > " ;
}
return h;
}