【问题标题】:Mysterious runtime error in IEIE中的神秘运行时错误
【发布时间】:2011-02-02 04:44:36
【问题描述】:

IE版本:8.0.6001.18702

<tr id="week-days"></tr>

function displayWeekDay( lang )
{
    var txt = '<td>num</td>';
    for ( i = 0; i < langs[lang].day.length; i++ )
        if ( i == 5 )       txt += '<td class="red"><b>'   + langs[lang].day[i] + '</b></td>';
        else if ( i == 6 )  txt += '<td class="red"><b>'   + langs[lang].day[i] + '</b></td>';
        else                txt += '<td><b>'               + langs[lang].day[i] + '</b></td>';
    document.getElementById("week-days").innerHTML = txt;
}

错误在最后一行 - document.getElementById("week-days").innerHTML = txt;

我有点困惑 - 有一个错误,但一切都正常显示。 Mozilla、Chrome、Safari 上没有错误。任何想法都会被欣赏。

编辑

【问题讨论】:

  • 你是否在 tr 存在之前运行脚本?
  • 未知的运行时错误。这可能是我见过的最具描述性的错误消息。 q_q
  • 你能把它扔进 jsFiddle 或类似的东西让我们乱用吗?
  • html 中不存在 tr 并且不是动态生成的。

标签: javascript internet-explorer runtime-error


【解决方案1】:

来自 MSDN:“table 和 tr 对象的 innerText 和 innerHTML 属性是只读的”http://msdn.microsoft.com/en-us/library/ms532998(v=vs.85).aspx

解决办法是用dom创建一个tr元素,或者用html构建一个完整的临时表,然后将行移动到目标表。像下面这样:

/** Appends a row to the given tbody */
function appendRow(tbody, trHTML) {
  var tempNode = document.createElement('div');
  tempNode.innerHTML = "<table><tr>" + trHTML + "</tr></table>";
  var tempTable = tempNode.firstChild;
  tbody.appendChild(tempTable.rows[0] );
}

您可以修改函数以指定要插入的位置,或者在之前或之后插入另一个 tr。

Can't set innerHTML on tbody in IE

【讨论】:

    【解决方案2】:

    这听起来像是quite some time 存在的 IE 问题。过去我自己也遇到过。您可能想尝试通过 DOM 方法创建节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2015-03-13
      • 2017-04-20
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多