关于javascript:无法设置属性InnerHTML为null

Cannot set property InnerHTML of null

本问题已经有最佳答案,请猛点这里访问。

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

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

1
2
3
4
5
6
7
8
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代码并将其附加到页面正文。


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

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

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

1
2
3
4
5
6
7
8
9
10
<html>
  <body>

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

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


我已经完成了这里提到的所有解决方案。但是在我使用Jquery创建这个之前它们没有工作:

在我的HTML页面中:

1
>

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

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


这是在html的中运行吗?如果是这样,您需要确保首先实际加载了标记。

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


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