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


Posted in Javascript onSeptember 26, 2014

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

Js代码

<!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)

点击下,看看你此时浏览本博客的浏览器是否支持

Click Me

<script type="text/javascript">// <![CDATA[ var isupportTbodyInnerHTML = function () { var table = document.createElement('table') var tbody = document.createElement('tbody') var tr = document.createElement('tr') var td = document.createElement('td') var txt = document.createTextNode('a') td.appendChild(txt) tr.appendChild(td) tbody.appendChild(tr) table.appendChild(tbody) var boo = true try{ tbody.innerHTML = '<tr><td>b</td></tr>' } catch(e) { boo = false } return boo }(); tbodyInnerHTML.onclick = function() { if (isupportTbodyInnerHTML) { alert('你的浏览器支持tbody的innerHTML赋值') } else { alert('你的浏览器是IE6-9内核,不支持tbody的innerHTML赋值') } } // ]]></script>

对于IE6-IE9里如果要设置tbody的innerHTML,可以使用如下替代方法

Js代码

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方法替换

Js代码

function setTBodyInnerHTML(tbody, html) { 
var div = document.createElement('div') 
div.innerHTML = '<table>' + html + '</table>' 
tbody.parentNode.replaceChild(div.firstChild.firstChild, tbody) 
}
Javascript 相关文章推荐
Extjs单独定义各组件的实例代码
Jun 25 Javascript
jquery 图片缩放拖动的简单实例
Jan 08 Javascript
基于编写jQuery的无缝滚动插件
Aug 02 Javascript
30个经典的jQuery代码开发技巧
Dec 15 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
微信JS接口汇总及使用详解
Jan 09 Javascript
javascript每日必学之运算符
Feb 16 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
详解在AngularJS的controller外部直接获取$scope
Jun 02 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
微信接入之获取用户头像的方法步骤
Sep 23 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 #Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 #Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 #Javascript
javascript 自定义回调函数示例代码
Sep 26 #Javascript
jquery和js实现对div的隐藏和显示方法
Sep 26 #Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 #Javascript
jquery实现一个简单好用的弹出框
Sep 26 #Javascript
You might like
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
vue-router跳转页面的方法
2017/02/09 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
Python实现k-means算法
2018/02/23 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
Python函数返回不定数量的值方法
2019/01/22 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
影视动画专业个人的自我评价
2013/12/31 职场文书
新年晚会主持词
2014/03/24 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB
Go语言 详解net的tcp服务
2022/04/14 Golang