首页 > 开发 > HTML > 正文

IE 下的只读 innerHTML

2020-09-18 22:11:32
字体:
来源:转载
供稿:网友

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

123456
<table><thead></thead><tbody id="filelist"></tbody></table>

然后在javascript 中这样操作:

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

123456789101112
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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表