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 相关文章推荐
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
Mootools 1.2教程(21)——类(二)
Sep 15 Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
May 22 Javascript
jquery自定义属性(类型/属性值)
May 21 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
Nov 23 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 Javascript
javascript中的面向对象
Mar 30 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
Feb 24 Javascript
JavaScript代码调试方法实例小结
Jan 05 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
async和DOM Script文件加载比较
2014/07/20 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
JavaScript window.location对象
2014/11/14 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
基于python实现模拟数据结构模型
2020/06/12 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
办公室主任先进事迹
2014/01/18 职场文书
运动会广播稿30字
2014/01/21 职场文书
2014教师年度工作总结
2014/11/10 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
保洁员岗位职责
2015/02/04 职场文书
酒店前台辞职书
2015/02/26 职场文书
上课迟到检讨书
2015/05/06 职场文书
用电申请报告范文
2015/05/18 职场文书
地道战观后感400字
2015/06/04 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
frg-100简单操作(设置)说明
2022/04/05 无线电