IE6-IE9中tbody的innerHTML不能赋值的解决方法


Posted in Javascript onJune 05, 2014

IE6-IE9中tbody的innerHTML不能赋值,重现代码如下

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"/> 
<title>IE6-IE9中tbody的innerHTML不能复制bug</title> 
</head> 
<body style="height:3000px"> 
<table> 
<tbody> 
<tr><td>aaa</td></tr> 
</tbody> 
</table> 
<p> 
<button id="btn1">GET</button><button id="btn2">SET</button> 
</p> 
<script> 
var tbody = document.getElementsByTagName('tbody')[0] 
function setTbody() { 
tbody.innerHTML = '<tr><td>bbb</td></tr>' 
} 
function getTbody() { 
alert(tbody.innerHTML) 
} 
btn1.onclick = function() { 
getTbody() 
} 
btn2.onclick = function() { 
setTbody() 
} 
</script> 
</body> 
</html>

两个按钮,第一个获取tbody的innerHTML,第二个设置tbody的innerHTML。

获取时所有浏览器都弹出了tr的字符串,但设置时IE6-9不支持,而且报错,如图
IE6-IE9中tbody的innerHTML不能赋值的解决方法 
可以利用特性判断来看浏览器是否支持tbody的innerHTML设值

var isupportTbodyInnerHTML = function () { 
var table = document.createElement('table') 
var tbody = document.createElement('tbody') 
table.appendChild(tbody) 
var boo = true 
try{ 
tbody.innerHTML = '<tr></tr>' 
} catch(e) { 
boo = false 
} 
return boo 
}() 
alert(isupportTbodyInnerHTML)

对于IE6-IE9里如果要设置tbody的innerHTML,可以使用如下替代方法
function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
while(tbody.firstChild) { 
tbody.removeChild(tbody.firstChild) 
} 
tbody.appendChild(div.firstChild.firstChild) 
}

用一个div来包含一个table,然后删除tbody里的所有元素,最后给tbody添加div的第一个元素的第一个元素,即div>table>tr。

当然还有一个更精简的版本,它直接采用replaceChild方法替换

function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
tbody.parentNode.replaceChild(div.firstChild.firstChild, tbody) 
}

从MSDN上记录上看 col、colGroup、frameset、html、head、style、table、tfoot、tHead、title和tr的innerHTML都是只读的(IE6-IE9)。

The innerHTML property is read-only on the col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, and tr objects.

You can change the value of the title element using the document.title property.

To change the contents of the table, tFoot, tHead, and tr elements, use the table object model described in Building Tables Dynamically. However, to change the content of a particular cell, you can use innerHTML.

Javascript 相关文章推荐
jquery 单引号和双引号的区别及使用注意
Jul 31 Javascript
JS面向对象编程详解
Mar 06 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
微信小程序 监听手势滑动切换页面实例详解
Jun 15 Javascript
纯JS实现简单的日历
Jun 26 Javascript
jsonp跨域请求详解
Jul 13 Javascript
layui框架中layer父子页面交互的方法分析
Nov 15 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 Javascript
vue的$http的get请求要加上params操作
Nov 12 Javascript
小程序实现tab标签页
Nov 16 Javascript
首页图片漂浮效果示例代码
Jun 05 #Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 #Javascript
javascript的事件触发器介绍的实现
Jun 05 #Javascript
javascript中attribute和property的区别详解
Jun 05 #Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
Jun 05 #Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 #Javascript
javascript数组去重方法终极总结
Jun 05 #Javascript
You might like
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
php中session退出登陆问题
2014/02/27 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
php多进程应用场景实例详解
2019/07/22 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
js+css实现打字效果
2020/06/24 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
Vue实现验证码功能
2019/12/03 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
基于opencv实现简单画板功能
2020/08/02 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
军训感想500字
2014/02/20 职场文书
报关专员求职信范文
2014/02/22 职场文书
质量月口号
2014/06/20 职场文书
领导班子对照检查材料
2014/09/22 职场文书
大学生团日活动总结
2015/05/06 职场文书
小学运动会加油稿
2015/07/22 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python