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模板插件——jQuery Boilerplate介绍
Sep 23 Javascript
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
Apr 04 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
详解js删除数组中的指定元素
Oct 31 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
Angular.JS读取数据库数据调用完整实例
Jul 02 Javascript
基于layui实现高级搜索(筛选)功能
Jul 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
python中字典(Dictionary)用法实例详解
2015/05/30 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
俄语专业毕业生推荐信
2013/10/28 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
师德师风演讲稿
2014/05/05 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
《丑小鸭》教学反思
2016/02/19 职场文书