可能是一个快速:在.innerHTML调用中逃避问题(我认为)

时间:2009-02-20 17:46:26

标签: javascript internet-explorer-7 innerhtml

设置:

我有一个suckerdiv菜单,其中包含调用函数的链接。所述功能如下:

function F(string)
{
    var s = '';
    var c = '';
    var t = '';
    if(string == 'cat')
    {
        s = "cat";
        c = "animal";
        t = "fluffy";
    }
   // ...
    document.getElementById("title").innerHTML = t;
    document.getElementByID("category").innerHTML = c;
    document.getElementByID("description").innerHTML = s;
}

工作正常。 但是,在实际实现中,描述变量中有一点点HTML,而且它似乎正在抛弃IE。 firefox对待它很好,但如果我有,比方说,

c = 'Stuff<br><ul><li>listed stuff</li><li>more listed stuff</li><li>some more listed stuff</li></ul><br>bla bla<br>bla';

然后IE抛出一​​个未知的运行时错误并在我点击该特定链接时死亡。

上面的三个ID是嵌套在表中的div:

<table border=1>
<tr><td><div id="title"></div></td></tr>
<tr><td><div id="category"></div></td></tr>
<tr><td><div id="description"></div></td></tr>
</table>

我知道表格本身在IE中是只读的,但我也知道TD不是。标题和类别都工作正常,所以我认为它与该字符串中的html有关。是否有一部分我应该逃避?我尝试用html-escape代码填充它,如&lt;等,但它只是没有评估HTML,我留下了一堆丑陋的文字。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我只能猜测您可能想尝试自行关闭您的BR标签:<br />

当您使用PrototypejQuery等库进行DOM操作时,这种情况经常会消失。浏览器怪癖通常在内部被考虑在内。

答案 1 :(得分:1)

卫生署!

抱歉浪费你的时间,伙计们 - 事实证明这完全不相关。由于div的id,这条线路正在破裂;由于页面中间的HTML嵌套在由内容管理系统生成的包含div中,显然页面中的其他地方还有另一个div。将“div id = description”更改为“div id = dynDescription”解决了它。

感谢您的回答!绝对赞赏。

答案 2 :(得分:0)

我创建了以下测试用例:

<html><head></head><body>
<script type="text/javascript">
function F(str) {
  var s = '';
  var c = '';
  var t = '';
  if (str == 'cat') {
    s = "cat";
    // c = "animal";
    c = 'Stuff<br><ul><li>listed stuff</li><li>more listed stuff</li><li>some more listed stuff</li></ul><br>bla bla<br>bla';
    t = "fluffy";
  }
  // ...
  document.getElementById("title").innerHTML = t;
  document.getElementById("category").innerHTML = c;
  document.getElementById("description").innerHTML = s;
}
</script>
<table border="1">
<tr><td><div id="title"></div></td></tr>
<tr><td><div id="category"></div></td></tr>
<tr><td><div id="description"></div></td></tr>
</table>
<form><input type="button" onclick="F('cat');"></form>
</body></html>

它似乎在Internet Explorer 7中正常工作。您确定// ...中没有导致错误的内容吗?您是否已确认Internet Explorer 7的每个副本都会发生这种情况(您的副本可能有一个附加组件,损坏或过时的组件或不正确的注册表项导致您看到的错误)。您是否已将问题缩小到使用简单而简洁的代码示例(如上所示)将字符串分配给innerHTML?