IE把TAG标签名转为大写的处理
时间:2007-07-28 来源:shiwudao
有时候需要把一段XML作为某个页面元素的内容传递,然后利用innerHTML读取,但是在IE下会自动的把TAG名转为大写,不符W3规范,有时候需要转为小写才可用。FF下则都为小写。
比如
<div id="testdiv">
<testtag>
<tag1 attr1="1231231" attr2="1232"> data1
<tag2 attr1="ss"> data2
</tag2>
</tag1>
<tag3>data3</tag3>
</testtag>
</div>
在IE6中使用document.getElementById('testdiv').innerHTML读取的字符串为
<TESTTAG><TAG1 attr1="1231231" attr2="1232">data1 <TAG2 attr1="ss">data2 </TAG2></TAG1><TAG3>data3</TAG3> </TESTTAG>
可以通过下面的函数进行转换
function convert(str) {
var result = str.replace( /<(\/?)(\s*)([^\s\>]+)(\s|\>)/gi, tolower ); //首先是以<开头 //接着可以有一个/,为结束tag的时候 //然后可以有若干个空格。 实际上如果tag名和开头的<之间有空格的话,IE,包括FF都不会认为这是合法的XML格式。不过为了健壮性还是处理吧。 //然后就是tag的名字,它至少有一个字符,并且不能为空格和> //然后是空格(在有attribute的情况)或者直接是结束的> return result;
function tolower() { //内部函数用于转换为小写
var arg = arguments;
if (arg.length > 0)
return arg[0].toLowerCase();
}
} 经过转换后的字符串为 <testtag><tag1 attr1="1231231" attr2="1232">data1 <tag2 attr1="ss">data2 </tag2></tag1><tag3>data3</tag3> </testtag> 当然,这个小函数还没有考虑注释(<!-- -->以及,IE会去掉某些结束tag的问题,比如<p>,<li>之类的,不过一般情况已经够用了,或者你有兴趣可以自己添加。
var result = str.replace( /<(\/?)(\s*)([^\s\>]+)(\s|\>)/gi, tolower ); //首先是以<开头 //接着可以有一个/,为结束tag的时候 //然后可以有若干个空格。 实际上如果tag名和开头的<之间有空格的话,IE,包括FF都不会认为这是合法的XML格式。不过为了健壮性还是处理吧。 //然后就是tag的名字,它至少有一个字符,并且不能为空格和> //然后是空格(在有attribute的情况)或者直接是结束的> return result;
function tolower() { //内部函数用于转换为小写
var arg = arguments;
if (arg.length > 0)
return arg[0].toLowerCase();
}
} 经过转换后的字符串为 <testtag><tag1 attr1="1231231" attr2="1232">data1 <tag2 attr1="ss">data2 </tag2></tag1><tag3>data3</tag3> </testtag> 当然,这个小函数还没有考虑注释(<!-- -->以及,IE会去掉某些结束tag的问题,比如<p>,<li>之类的,不过一般情况已经够用了,或者你有兴趣可以自己添加。
相关阅读 更多 +