作家
登录

IE 下的只读 innerHTML

作者: 来源:www.28hudong.com 2013-03-30 02:23:24 阅读 我要评论

今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个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

  推荐阅读

  jQuery ui1.7 dialog只能弹出一次问题

复制代码 代码如下:// 显示确认对话框 function showConfirm(txtTitle, txtMsg, callback){ getDivDialog().text(txtMsg).dialog({ modal: true , overlay: { opacity: 0.5 }>>>详细阅读


本文标题:IE 下的只读 innerHTML

地址:http://www.17bianji.com/kaifa2/JS/28235.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)