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.ui.dialog 增加“自动记住关闭时的位置”的功能
Nov 24 Javascript
return false;和e.preventDefault();的区别
Jul 11 Javascript
前后台交互过程中json格式如何解析以及如何生成
Dec 26 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
Sep 17 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
Aug 30 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
vue实现的微信机器人聊天功能案例【附源码下载】
Feb 18 Javascript
vue弹出框组件封装实例代码
Oct 31 Javascript
前端开发基础javaScript的六大作用
Aug 06 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
首页图片漂浮效果示例代码
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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP调用MySQL的存储过程的实现代码
2008/08/12 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php生成HTML文件的类方法
2019/10/11 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
微信小程序 五星评分的实现实例
2017/08/04 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
儿童编程python入门
2018/05/08 Python
通过代码实例了解Python异常本质
2020/09/16 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
会计应聘求职信范文
2013/12/17 职场文书
应届毕业生简历自我评价
2014/01/31 职场文书
电气个人求职信范文
2014/02/04 职场文书
报告会主持词
2014/04/02 职场文书
企业环保标语
2014/06/10 职场文书
岗位说明书怎么写
2014/07/30 职场文书
教师师德考核自我评价
2014/09/13 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
单位单身证明样本
2014/10/11 职场文书
搞笑老公保证书
2015/02/26 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL