最近开发时遇到个怪事,就是前台我用ajax访问后台 ,拿到数据后,拼好HTML代码,用的是
document.getElementById("id").innerHTML=tblhtml
赋值到一个table中,这个在FireFox和Chrome里是正常的,提交测试后。。发现在IE下有问题,别管IE几都有问题,拼接好的HTML片段就是加不上去。用 alert输出下tblhtml试试,也正常,百度一下发现:
因为IE在对innerHTML进行写操作时会检查element是否具备做为这些内容中html对象容器的要求,比如将<p>作为容器,它的innerHTML里面放入<li>,马上就会出错。更加另人郁闷的地方:<table> <tbody> <tr> 在ie中也无法作为innerHTML的容器使用在他们里头加入正确的<td>都不行,然而<td>却可以作为容器,放入包括<table>的innerHTML。
页面是UI人员设计的,所以打算找UI换成 <div> , <span>结构。
后来突然想起了JQuery也有给元素赋HTML的函数,就是
$("#id").html(tblhtml)
试了一下,果然好使,所以就将所有的innerHTML改成了JQuery的html()函数。
看来IE果然与众不同啊,,遇到这个问题,如果又不想使用JQuery的话,那只能绕开Table咯。
另外 还有一个问题就是,给table赋值上html代码后,浏览器渲染的时候会自动加上<tbody>标签,如果这个时候在获取<table>的innerHTML的话,就会带着<tbody>,这些代码如果和其他的<tr>拼接的话,其他的会显示不出来的哦。。。经验而已,一句话,就是对<table><tr>实行innerHTML时,谨慎小心。。。