邓华

BlogJava 联系 聚合 管理
  48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks

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;
}
posted on 2006-10-08 11:06 邓华的碎碎念 阅读(1083) 评论(2)  编辑  收藏

Feedback

# re: ie的outerhtml与xhtml不兼容的问题解决  2006-10-11 10:21 123bingbing
做程序员太乏味?来这里www.mylinux.com.cn试试吧,你肯定能找到乐趣!
  回复  更多评论
  

# re: ie的outerhtml与xhtml不兼容的问题解决  2007-10-23 09:04 创世纪计算机
谢谢分享  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: