IE 下的只读 innerHTML


Posted in Javascript onAugust 21, 2009

今天做东西遇到一个问题,我试图动态为一个表格添加多行数据,先定义了一个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 相关文章推荐
js变量作用域及可访问性的探讨
Nov 23 Javascript
jQuery 开天辟地入门篇一
Dec 09 Javascript
jquery基础教程之数组使用详解
Mar 10 Javascript
jQuery mobile 移动web(6)
Dec 20 Javascript
jQuery选择器及jquery案例详解(必看)
May 20 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
jQuery简单绑定单个事件的方法示例
Jun 10 jQuery
使用Dropzone.js上传的示例代码
Oct 10 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
Sep 04 Javascript
使用koa2创建web项目的方法步骤
Mar 12 Javascript
微信小程序之数据绑定原理解析
Aug 14 Javascript
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
JS 控制CSS样式表
Aug 20 #Javascript
JS获取父节点方法
Aug 20 #Javascript
javascript 数组排序函数
Aug 20 #Javascript
用Javascript数组处理多个字符串的连接问题
Aug 20 #Javascript
JQUERY 浏览器判断实现函数
Aug 20 #Javascript
google地图的路线实现代码
Aug 20 #Javascript
JavaScript 字符串乘法
Aug 20 #Javascript
You might like
JAVA/JSP学习系列之六
2006/10/09 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
jquery+CSS3实现淘宝移动网页菜单效果
2015/08/31 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
财务会计专业毕业生自荐信
2013/10/19 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
房产继承公证书
2014/04/09 职场文书
购房协议书范本
2014/10/02 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
护理专业自我评价
2015/03/11 职场文书
运动会新闻稿
2015/07/17 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js