当前位置: 首页 > 图文教程 > 网页制作 > HTML/XHTML教程 > IE 下的只读 innerHTML

HTML/XHTML教程
网页设计师如何应对客户无理要求
打开网页速度提升的简单而有效的方法
让IE8启动IE7兼容模式的简便代码
HTML的sub,sup标签制作电子商务网站中的价格
IE9关键字:硬件渲染,新的JS引擎,CSS,标准
让IE支持HTML5办法
HTML教程:HTML的10个表格相关标记
HTML教程:网页页面切换的各种效果
网页制作掌握的最常用的HTML标记
应该怎样把HTML结构化
XHTML基础教程:xhtml的块级标记
网页页面实现自动刷新的3种代码
网页制作教程:TD也可以溢出隐藏显示
网页设计教程:TabIndex元素
微软:IE9与HTML 5的关系
HTML设备标识符可以让用户使用网页与摄像头等硬件设备打交道
HTML5和CSS3的一些新变化
超级链接标记A的TARGET属性详解
语义化的网页:XHTML语义化标记
理论知识:PSD模板切成HTML的正确操作

HTML/XHTML教程 中的 IE 下的只读 innerHTML


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 150 ::
收藏到网摘: n/a

今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个table:

1
2
3
4
5
6
<table>
<thead>
</thead>
<tbody id="filelist">
</tbody>
</table>

然后在JavaScript 中这样操作:

1
2
3
4
5
for(var i in entries){ ... var filetable = document.getElementById('filelist'); filetable.innerHTML += '<tr><td>111</td><td>222</td></tr>';
}


在FireFox 下这么干是没有问题的,但是放到 IE 下面就死活不行了,问了下同事+搜索了一下,发现在 IE 下 COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR 这些元素的 innerHTML 属性都是只读的,不能直接操作。但是也不是没有解决办法,TD 的innerHTML 还是可以操作的,上面的代码可以这样修改:

1
2
3
4
5
6
7
8
9
10
11
12
for(var i in entries){ ... var filetable = document.getElementById('filelist'); var tr = document.createElement('tr'); var td1 = document.createElement('td'); td1.innerHTML = '111'; var td2 = document.createElement('td'); td2.innerHTML = '222'; tr.appendChild(td1); tr.appendChild(td2); filetable.appendChild(tr);
}

可以先使用 DOM 的 createElement 方法创建 tr 和 td,然后对 td 的 innerHTML 进行相应操作,最后用 appendChild 方法把创建的元素添加到 DOM 树中。这样在 IE 下就可以正常运行了。需要注意的是,如果你的 table 没有 tbody,而是这样:

1
<table id="filelist"></table>

这个时候就不能对 table 直接使用 appendChild 方法了,因为IE6 下 table 元素是不支持 appendChild 方法的(IE8 貌似已经支持了)。

网上也有人提出用 insertRow() 等方法来做,不过这个方法对不同浏览器的兼容也是有问题的(在FireFox 下就需要使用 insertRow(-1) ),所以就没用。

BTW,虽然之前也有意识地看了不少 JS 的资料,但还是实践出真知啊,现在刚开始手忙脚乱的,学习淡定ING