Jquery在IE9解释xml多出一个XML声明

gentlemanhua 2017-08-03

Jquery在创建标签元素的语法为:

$('<标签>');
   在高级浏览器中,会正确执行,但在IE9等浏览器中,会被解析为xml文件,并带上xml声明:

1. 浏览器不认识的空标签时,如: 

$('<otherTags>')[0].outerHTML;
$('<otherTags/>')[0].outerHTML;
   会被JQuery误认为是xml文件:
<?XML:NAMESPACE PREFIX="PUBLIC" NS="URN:COMPONENT"/>
<othertag></othertag>

   遇到这种情况时,我们可以在空标签元素外包一个<html>,如

$('<html><otherTag>')[0].outerHTML;
$('<html><otherTag/></html>')[0].outerHTML;
   可以正确解析:
<othertag>
<othertag></othertag>

 2.标签中包含xmlns属性时,如:

$('<otherTags xmlns="jabber:client">content</otherTags>')[0].outerHTML;
   也会被JQuery误认为是xml文件:
<?XML:NAMESPACE PREFIX="[default] jabber:client" NS="jabber:client" />
<othertags xmlns="jabber:client">content</othertags>
   这时如果再简单的在标签外套一个html标签已经行不通了,我们只能曲线救国,那就是在创建时去掉xmlns属性,然后使用attr函数再追加上这个属性:
var tag = $('<otherTags>content</otherTags>');
tag.attr({xmlns:'jabber:client'});
console.log(tag[0].outerHTML);
   控制台打印结果正确结果:
<othertags xmlns="jabber:client">content</othertags>

相关推荐