zoukankan      html  css  js  c++  java
  • innerHTML在早期IE版本不支持的問題

    前两天在在页面时需要动态创建table,由于需要动态生成行,于是偷懒使用了innerHTML属性

    自己习惯使用FF,无意中使用IE打开竟发现报错了。

    debug了一下发现是innerHTML搞得鬼。

    在MSDN下找到了下面的描述:

    https://msdn.microsoft.com/en-us/library/ms533897%28v=vs.85%29.aspx

    The innerHTML property is read-only on the col, colGroup, frameSet, html, head, style, table, tBody, tFoot, tHead, title, and tr objects.

    即在上述元素中,innerHTML属性是为只读的,我们不能直接使用innerHTML来改变它们的行为。

    解决方法:

    1, 使用DOM方法{createElement, appendChild, etc.}. 但需覺得,在IE9-中,你可以使用  (table > tr > td)的 html代碼結構來創建表格,但是用javascript來創建DOM時,你必須使用  (table > tbody > tr > td)的結構。IE不會拋出錯誤,但是不會渲染出table出來。

    2,使用輔助div

    function setTableInnerHTML(table, html) {
            if (navigator && navigator.userAgent.match(/msie/i)) {
                    var temp = table.ownerDocument.createElement('div');
                    temp.innerHTML = '<table><tbody>' + html + '</tbody></table>';
                    if (table.tBodies.length == 0) {
                            var tbody = document.createElement("tbody");
                            table.appendChild(tbody);
                    }
                    table.replaceChild(temp.firstChild.firstChild, table.tBodies[0]);
            } else {
                    table.innerHTML = html;
            }
    }

    庆幸的是,此问题在IE10以上版本已经得到修复

    參考:

    http://webbugtrack.blogspot.com/2007/12/bug-210-no-innerhtml-support-on-tables.html

    http://www.jb51.net/article/31267.htm

  • 相关阅读:
    [Java123] JDBC and Multi-Threading 多线程编程学习笔记
    3:2D装换 [ 重点 ]
    2:属性选择器 + 结构伪类选择器 + 伪元素
    1:新增 H5 常用属性
    day2
    代码实操第一天
    1 滑动门
    css高级技巧
    11:网页布局总结
    10:定位
  • 原文地址:https://www.cnblogs.com/deryck/p/4460091.html
Copyright © 2011-2022 走看看