无法将属性InnerHTML设置为null

时间:2012-06-22 19:45:01

标签: javascript html

我有一个简单的html页面,body标签中没有代码。 我想通过javascript在主体标签中插入html。

我的javascript文件看起来像这样。

var Global={
    UserWall:function(){
          return "a very long html code";
   }
};

    var globalObject=Object.create(Global);
   document.getElementsByTagName("body").item(0).innerHTML=globalObject.UserWall();

现在我希望在页面加载时将这个非常长的html代码自动插入到body标签中。 但它给了我在标题中提到的错误。为什么?

这也是创建基于jax的网站(没有页面重新加载)的正确方法,这意味着如果我调用服务器端脚本来更新这个非常长的html代码并将其附加到页面主体。

4 个答案:

答案 0 :(得分:53)

在构建DOM之前,您几乎肯定会运行代码。尝试在window.onload处理程序函数中运行代码(但请参阅下面的注释):

window.onload = function() {
    // all of your code goes in here
    // it runs after the DOM is built
}

另一种流行的跨浏览器解决方案是将<script>块放在结束</body>标记之前。根据您的需求,这可能是最佳解决方案:

<html>
  <body>

    <!-- all of your HTML goes here... -->

    <script>
        // code in this final script element can use all of the DOM
    </script>
  </body>
</html>
  • 请注意window.onload将等到所有图像和子帧都已加载,这可能需要很长时间才能构建DOM。您也可以使用document.addEventListener("DOMContentLoaded", function(){...})来避免此问题,但跨浏览器不支持此功能。底层技巧是跨浏览器,并在DOM完成后立即运行。

答案 1 :(得分:5)

我已经完成了这里提到的所有解决方案。但是直到我使用Jquery制作了这个之后它们才起作用:

在我的HTML页面中:

> <div  id="labelid" > </div>

当我点击一个按钮时,我把它放在我的JS文件中:

$("#labelid").html("<label>Salam Alaykom</label>");

答案 2 :(得分:4)

这是否在html的<head>中运行?如果是这样,您需要确保<body>标记实际上已首先加载。

您需要使用onload处理程序,例如:http://javascript.about.com/library/blonload.htm

答案 3 :(得分:0)

也许这会奏效: document.getElementsByTagName("body")[0].innerHTML