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

时间:2012-02-28 18:51:16

标签: javascript events dom onload

只要body DOM节点可用,我就想用JavaScript添加一个类。
我希望在body的任何一个孩子被加载之前,尽快发生

现在,我在打开body标记后立即使用内联脚本。是否有一种不那么突兀的方式?

2 个答案:

答案 0 :(得分:2)

我认为浏览器会有所不同。

一种解决方案可能是通过在开始的<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可用。


Here's the source 其中jQuery采用类似的方法,测试其body处理程序中jQuery.ready的存在,如果jQuery.ready不可用,请通过setTimeout重复调用body

here's an example查看您的浏览器是否可以在其他元素之前的元素顶部的脚本中看到<body>元素。 (打开你的控制台)

Here's the same example,无需控制台。

答案 1 :(得分:2)

可能会晚一点但是......

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

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