我如何知道DOM“body”元素何时可用

How do I know when DOM “body” element is available?

本文关键字:元素 何时可 body 何知道 DOM      更新时间:2023-09-26

一旦body DOM节点可用,我想用JavaScript为其添加一个类
我希望在加载body的任何子级之前,尽快发生这种情况。

现在,在打开body标记之后,我正在使用一个内联脚本。有没有一种不那么突兀的方式?

聚会可能会有点晚,但。。。

您可以直接进入浏览器渲染周期。因此,您不必处理会泄漏内存的超时(如果使用不当)。

  var script = document.createElement('script');
  script.src = '//localhost:4000/app.js';
  (function appendScript() {
    if (document.body) return document.body.appendChild(script);
    window.requestAnimationFrame(appendScript);
  })();

我想这在浏览器之间会有所不同。

一种解决方案可能是测试它,方法是将脚本直接放在打开的<body>标记中,然后每隔一段时间运行代码以添加类。

<body>
    <script>
    function add_class() { 
        if(document.body)
             document.body.className = 'some_class';
        else 
            setTimeout(add_class, 10);  // keep trying until body is available
    }
    add_class();
    </script>
    <!-- rest of your elements-->
</body>

jQuery在内部执行类似的操作来处理特定的IE错误

但不能保证不会加载子代元素,因为这将再次取决于特定实现何时使body可用。


这是源,jQuery采用类似的方法,在其主jQuery.ready处理程序中测试body的存在,如果body不可用,则通过setTimeout重复调用jQuery.ready

这里有一个例子,看看你的浏览器是否可以在脚本中的元素顶部,在其他元素之前看到<body>元素(打开控制台)

这是一个不需要控制台的相同示例