IE 下的只读 innerHTML_Javascript教程-查字典教程网
IE 下的只读 innerHTML
IE 下的只读 innerHTML
发布时间:2016-12-30 来源:查字典编辑
摘要:今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个table:复制代码代码如下:然后在JavaScript中这样操作:复...

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

复制代码 代码如下:

<table>

<thead>

</thead>

<tbody id="filelist">

</tbody>

</table>

然后在JavaScript 中这样操作:

复制代码 代码如下:

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 还是可以操作的,上面的代码可以这样修改:

复制代码 代码如下:

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,而是这样:

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

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

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

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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类