ie的outerhtml与xhtml不兼容的问题解决 

ie的outerhtml与xhtml不兼容的问题解决 

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;
}

你可能感兴趣的:(ie的outerhtml与xhtml不兼容的问题解决 )