无法将属性InnerHTML设置为null

Mj1*_*992 15 html javascript

我有一个简单的html页面,body标签中没有代码.我想通过javascript在body标签中插入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();
Run Code Online (Sandbox Code Playgroud)

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

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

aps*_*ers 53

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

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

另一种流行的跨浏览器解决方案是将<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>
Run Code Online (Sandbox Code Playgroud)
  • 请注意,这window.onload将等到所有图像和子帧都已加载,这可能是构建DOM后的很长一段时间.您也可以使用document.addEventListener("DOMContentLoaded", function(){...})以避免此问题,但跨浏览器不支持此功能.底层技巧是跨浏览器,并在DOM完成后立即运行.


小智 5

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

在我的HTML页面中:

> <div  id="labelid" > </div>
Run Code Online (Sandbox Code Playgroud)

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

$("#labelid").html("<label>Salam Alaykom</label>");
Run Code Online (Sandbox Code Playgroud)