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 相关文章推荐
javascript延时重复执行函数 lLoopRun.js
Jun 29 Javascript
jQuery filter函数使用方法
May 19 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
Bootstrap每天必学之前端开发框架
Nov 19 Javascript
JS选取DOM元素的简单方法
Jul 08 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 Javascript
webpack教程之webpack.config.js配置文件
Jul 05 Javascript
React应用中使用Bootstrap的方法
Aug 15 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 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中防止SQL注入的最佳解决方法
2013/04/25 PHP
php自定文件保存session的方法
2014/12/10 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
three.js实现圆柱体
2018/12/30 Javascript
python重试装饰器示例
2014/02/11 Python
Python使用chardet判断字符编码
2015/05/09 Python
python实现给数组按片赋值的方法
2015/07/28 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Django框架模板用法入门教程
2019/11/04 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
Django中的session用法详解
2020/03/09 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
什么是Web Service?
2012/07/25 面试题
领班岗位职责范文
2014/02/06 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
财务人员岗位职责
2015/02/03 职场文书
演讲开场白台词大全
2015/05/29 职场文书