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

 更新时间:2014年06月05日 15:33:49   作者:  
这篇文章主要介绍了IE6-IE9中tbody的innerHTML不能赋值的解决方法,需要的朋友可以参考下
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不支持,而且报错,如图
 
可以利用特性判断来看浏览器是否支持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实现强制重定向至HTTPS页面

    JavaScript实现强制重定向至HTTPS页面

    这篇文章主要介绍了JavaScript实现强制重定向至HTTPS页面,本文讲解如何用JS实现HTTP重定向HTTPS或者HTTPS跳转到HTTP,需要的朋友可以参考下
    2015-06-06
  • 在Webpack中用url-loader处理图片和字体的问题

    在Webpack中用url-loader处理图片和字体的问题

    这篇文章主要介绍了在Webpack中用url-loader处理图片和字体的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 通过js简单实现将一个文本内容转译成加密文本

    通过js简单实现将一个文本内容转译成加密文本

    将文本内容转译成加密文本,在某些情况下还是比较实用的,下面通过js简单实现下,感兴趣的朋友不要错过
    2013-10-10
  • 详解如何使用webpack打包多页jquery项目

    详解如何使用webpack打包多页jquery项目

    这篇文章主要介绍了详解如何使用webpack打包多页jquery项目,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • js中getter和setter用法实例分析

    js中getter和setter用法实例分析

    这篇文章主要介绍了js中getter和setter用法,结合实例形式分析了javascript中getter和setter的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-08-08
  • JavaScript数据结构中栈的应用之表达式求值问题详解

    JavaScript数据结构中栈的应用之表达式求值问题详解

    这篇文章主要介绍了JavaScript数据结构中栈的应用之表达式求值问题,详细分析了中缀表达式、后缀表达式等概念、原理与转换方法,以及基于后缀表达式实现的表达式求值相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • Javascript动画插件lottie-web的使用方法

    Javascript动画插件lottie-web的使用方法

    这篇文章主要介绍了Javascript动画插件lottie-web的使用方法,包括配合vue-cli使用及在HTML页面中使用代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • postcss安装和使用示例详解

    postcss安装和使用示例详解

    这篇文章主要介绍了postcss安装和使用,通过这些深度集成,PostCSS不仅仅是一个简单的CSS处理工具,而是一种贯穿整个前端开发流程的技术手段,大大提升了CSS开发效率和产出质量,随着前端社区的发展,PostCSS的功能和应用场景也会更加丰富多元,需要的朋友可以参考下
    2024-03-03
  • js 封装cookie操作的函数代码

    js 封装cookie操作的函数代码

    这篇文章主要通过js封装cookie的函数代码,想用js实现cookies操作的朋友可以参考下
    2013-06-06
  • js实现移动端图片滑块验证功能

    js实现移动端图片滑块验证功能

    这篇文章主要为大家详细介绍了js实现移动端图片滑块验证功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09

最新评论