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 相关文章推荐
jQuery学习笔记 获取jQuery对象
Sep 19 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
node.js中的fs.rmdirSync方法使用说明
Dec 16 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
js事件处理程序跨浏览器解决方案
Mar 27 Javascript
javascript鼠标滑过显示二级菜单特效
Nov 18 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
写gulp遇到的ES6问题详解
Dec 03 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
Aug 23 Javascript
vue+ESLint 配置保存 自动格式化代码
Mar 17 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
改进的IP计数器
2006/10/09 PHP
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php中对2个数组相加的函数
2011/06/24 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
检讨书范文2000字
2015/01/28 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2015年新教师工作总结
2015/04/28 职场文书
入党积极分子考察意见
2015/06/02 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
MongoDB支持的索引类型
2022/04/11 MongoDB
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python