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 相关文章推荐
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
Jun 21 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
Mar 02 Javascript
实例讲解jquery与json的结合
Jan 07 Javascript
JavaScript里 ==与===区别详解
Aug 16 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
Sep 17 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
jquery dataview数据视图插件使用方法
Dec 23 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 Javascript
vue 封装面包屑组件教程
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
php实现有趣的人品测试程序实例
2015/06/08 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
浅谈Python3中print函数的换行
2020/08/05 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
家长写给老师的建议书
2014/03/13 职场文书
感恩之星事迹材料
2014/05/03 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
2014年教研工作总结
2014/12/06 职场文书
岗位聘任报告
2015/03/02 职场文书
稽核岗位职责范本
2015/04/13 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL