只要body
DOM节点可用,我就想用JavaScript添加一个类。
我希望在body
的任何一个孩子被加载之前,尽快发生
现在,我在打开body
标记后立即使用内联脚本。是否有一种不那么突兀的方式?
答案 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);
})();