.innerHTML歌剧问题?

时间:2009-06-03 16:17:53

标签: javascript cross-browser opera

我正在尝试:

document.getElementById("header-text").innerHTML = "something interesting";

除Opera之外的每个浏览器都能正常工作(我正在运行最新版本)。

浏览互联网我发现有人说Opera不支持innerHTML。这听起来不对。

任何指针?

由于

修改:这是我想要的ID

<div id="header-text" class="picture-text">
          <!--[if gt IE 5]>ugly hack<![endif]-->
          Some text generated server side
         <!--[if gt IE 5]>ugly hack<![endif]-->
</div>

Edit2 :我遇到了同样的问题:

<div id="header-text" class="picture-text">
          Static text
</div>

EDIT3

<body onload="intialize();">


function intialize() {
    operaHeaderFix();
}


function operaHeaderFix(){
    if(window.opera) {
        /*opera specific action*/ 
        document.getElementById("picture-line-wrapper").style.position="relative";
        document.getElementById("picture-line-wrapper").style.top="0px";
        document.getElementById("picture-line-wrapper").style.marginTop="-230px";
        document.getElementById("picture-line").style.padding="1px";
        document.getElementById("header-text").innerHTML = "<div style='margin:220px 0px 0px 20px;'>"+document.getElementById("header-text").innerHTML+"TEST</div>";
    }
}

Edit4 :如果删除if(window.opera),它将在FF和IE中正常运行

3 个答案:

答案 0 :(得分:2)

发现问题:

包装节点未正确关闭。

<div att1="value" att2="value"
  <div id="header-text">...</div>
</div>

AFAIK,FF和IE礼貌地修复了标签......但是Opera没有,因此孩子DIV实际上并不是DOM中的元素。


应该可以正常工作。 id为“header-text”的元素是什么?你确定只有一个匹配,它有可编辑的内容吗?

你可以发布一些标记,以便我们测试吗?

从PPK的网站上看,似乎没有任何Opera问题: http://www.quirksmode.org/dom/innerhtml.html

更新: 在XP上的Opera 9.6.4中运行此代码对我来说很好。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>innerHTML test</title>
<script>
  function doIt(){
    document.getElementById("header-text").innerHTML = "something interesting";
  }
</script>
</head>
<body>
  <div id="header-text" class="picture-text">
    Static text
  </div>
  <input type="button" value="Change It" onclick="doIt();"/><br/>
</body>
</html>

答案 1 :(得分:2)

我遇到了一个有点相关的问题,发现它与HTML编码值有关。例如,当innerHTML包含“&amp; nbsp;”时而不是空格,innerHTML会稍微不同(我通过测试innerHTML的长度来确认)。

以下是我在尝试获取包含单个DIV的标签的innerHTML时包含编码的非中断空格(&lt; div&gt;&amp; nbsp;&lt; / div&gt;)的内容:

<div> </div>

上面的例子显示了Opera 10.26如何返回innerHTML,当我检查长度时它将在Opera中返回12

<div>&nbsp;</div>

这就是我使用的所有其他浏览器返回innerHTML(IE6 / 7/8,Firefox 3.x,Chrome等)的方式,当我检查长度时,它将在所有其他浏览器中返回17。

答案 2 :(得分:0)

编辑:你怎么称呼这个功能?您是在文档<head>中调用它,在<body>的末尾,您使用的是window.onload吗?

innerHTML不是w3c-valid属性(它将在HTML 5中)。它由Microsoft创建,出于兼容性原因,仅受大多数其他浏览器的支持。

那就是说,我相信Opera确实支持innerHTML,但有些谷歌搜索表明它is broken in certain versions。尝试更新您的Opera版本,然后查看它是否有效。