我如何知道DOM“body”元素何时可用
How do I know when DOM “body” element is available?
一旦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>
元素(打开控制台)
这是一个不需要控制台的相同示例
相关文章:
- 如何使元素在可拖动元素内可单击
- D3 - 如何确定元素何时离开屏幕
- 观察任何元素何时更改
- 如何知道元素何时滚动到底
- 滚动后,检测元素何时返回到原始位置
- CKEDITOR内联在动态创建的元素上(可删除/可排序)
- 如何使克隆的 DOM 元素 JSON 可序列化
- 如何使嵌套元素在可拖动容器中不可拖动
- 如何使两个或多个 html 元素在可编辑区域中表现为一个单元
- 敲除获取绑定到 DOM 元素的可观察量
- 如何知道指令的最后一个元素何时在 AngularJS 中链接
- 量角器 3.1.1 + 角度 2:找不到元素的可测试性
- Jquery/JS:如何防止在父元素中滚动,而子元素是可滚动的(移动)
- 合成 JavaScript 元素何时执行
- 不能同时调整静态元素和可拖动元素的大小
- Jquery UI 在新元素上可调整大小不起作用
- 如何使用量角器测试检查元素是否可点击
- Javascript 将元素插入 char Ref 到带有子元素的可编辑 DIV 中
- 将参数添加到 d3 拖动行为后,元素不再可拖动
- 检查对象、函数或元素何时准备就绪