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 相关文章推荐
Prototype Array对象 学习
Jul 19 Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
JavaScript极简入门教程(三):数组
Oct 25 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
JavaScript ES2019中的8个新特性详解
Feb 20 Javascript
layui点击按钮页面会自动刷新的解决方案
Oct 25 Javascript
Vue项目打包编译优化方案
Sep 16 Javascript
js实现磁性吸附的示例
Oct 26 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
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
python开发之for循环操作实例详解
2015/11/12 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
最新党员的自我评价分享
2013/11/04 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
八年级语文教学反思
2014/02/11 职场文书
求职教师自荐书
2014/06/19 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
交通事故起诉书
2015/05/19 职场文书
就业证明函
2015/06/17 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
DIY胆机必读:各国电子管评价
2022/04/06 无线电