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