IE6-IE9中tbody的innerHTML不能赋值的解决方法
方法 解决 不能 赋值 IE6 innerHTML IE9 tbody
2023-06-13 09:15:46 时间
IE6-IE9中tbody的innerHTML不能赋值,重现代码如下
Js代码
<!DOCTYPEhtml> <html> <head> <metacharset="utf-8"/> <title>IE6-IE9中tbody的innerHTML不能复制bug</title> </head> <bodystyle="height:3000px"> <table> <tbody> <tr><td>aaa</td></tr> </tbody> </table> <p> <buttonid="btn1">GET</button><buttonid="btn2">SET</button> </p> <script> vartbody=document.getElementsByTagName("tbody")[0] functionsetTbody(){ tbody.innerHTML="<tr><td>bbb</td></tr>" } functiongetTbody(){ alert(tbody.innerHTML) } btn1.onclick=function(){ getTbody() } btn2.onclick=function(){ setTbody() } </script> </body> </html>
两个按钮,第一个获取tbody的innerHTML,第二个设置tbody的innerHTML。
获取时所有浏览器都弹出了tr的字符串,但设置时IE6-9不支持,而且报错,如图
可以利用特性判断来看浏览器是否支持tbody的innerHTML设值
varisupportTbodyInnerHTML=function(){ vartable=document.createElement("table") vartbody=document.createElement("tbody") table.appendChild(tbody) varboo=true try{ tbody.innerHTML="<tr></tr>" }catch(e){ boo=false } returnboo }() alert(isupportTbodyInnerHTML)
点击下,看看你此时浏览本博客的浏览器是否支持
ClickMe
<scripttype="text/javascript">//<![CDATA[varisupportTbodyInnerHTML=function(){vartable=document.createElement("table")vartbody=document.createElement("tbody")vartr=document.createElement("tr")vartd=document.createElement("td")vartxt=document.createTextNode("a")td.appendChild(txt)tr.appendChild(td)tbody.appendChild(tr)table.appendChild(tbody)varboo=truetry{tbody.innerHTML="<tr><td>b</td></tr>"}catch(e){boo=false}returnboo}();tbodyInnerHTML.onclick=function(){if(isupportTbodyInnerHTML){alert("你的浏览器支持tbody的innerHTML赋值")}else{alert("你的浏览器是IE6-9内核,不支持tbody的innerHTML赋值")}}//]]></script>
对于IE6-IE9里如果要设置tbody的innerHTML,可以使用如下替代方法
Js代码
functionsetTBodyInnerHTML(tbody,html){ vardiv=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代码
functionsetTBodyInnerHTML(tbody,html){ vardiv=document.createElement("div") div.innerHTML="<table>"+html+"</table>" tbody.parentNode.replaceChild(div.firstChild.firstChild,tbody) }
相关文章
- 【说站】css中outline方法的使用
- MongoDB用Mongoose得到的对象不能增加属性完美解决方法(两种)
- mongodb 3.4下远程连接认证失败的解决方法
- Oracle触发器表发生了变化 触发器不能读它解决方法详解数据库
- Linux解压乱码文件的解决方法(linux解压文件乱码)
- 【SQL Server删除数据失败:解决方法】(SQLserver删不掉)
- 解决mysql链接问题的方法与技巧(mysql不能让链接)
- mysql无法使用UUID数据类型的解决方法(mysql不能用uuid)
- MySQL无法本地连接解决方法来了(mysql 不能本地连接)
- 解决MySQL无法插入数据的方法(mysql 不能插入数据)
- 解决MySQL连接问题的有效方法(mysql不能成功连接)
- MySQL分区建立失败的解决方法(mysql 不能建分区)
- MySQL文本输入遇到回车换行问题这里有简单的解决方法(mysql不能回车换行)
- 解决MySQL命令无法保存问题的方法(mysql不能保存命令)
- 解决Redis队列挂掉的方法探索(redis队列挂掉怎么办)
- 收集的比较全的automation服务器不能创建对象异常原因和解决方法
- EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
- datagrid绑定list没有数据表头不显示的解决方法
- ASP.NET设置404页面返回302HTTP状态码的解决方法
- ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
- mysqld-nt:Outofmemory(Needed1677720bytes)解决方法
- Windwos服务器远程桌面不能复制粘贴的解决方法
- IISADMIN不能启动,提示错误代码-2146893818的解决方法
- Windows下PHP安装路径配置错误导致Apache无法启动的解决方法