当DOM"准备好"时运行JavaScript函数?

mia*_*elf 23 javascript

我正在使用一个JavaScript上传脚本,该脚本表示在DOM准备就绪后立即运行初始化函数.我现在可以使用函数调用body.onload或者在定义函数后直接使用它.该函数在占位符div中构建一些HTML,作为文件上载器工具.

我的问题是这里的最佳做法是什么?既然它现在有效,那么为什么指令会在DOM准备好后立即运行init函数?我应该在占位符DIV之后直接添加<script>标记吗?

Sha*_*531 47

<script>
    window.addEventListener("DOMContentLoaded", function() {
        // do stuff
    }, false);
</script>
Run Code Online (Sandbox Code Playgroud)

你这样做,所以你知道所有解析的元素在DOM等可用.


Ari*_*iel 7

在onLoad运行之前,DOM通常已准备就绪.onLoad仅在所有内容加载后运行 - 外部脚本,图像,样式表等.

但DOM,即HTML结构在此之前已经准备就绪.如果您运行页面底部的代码(或脚本使用的页面部分之后),它也可以正常工作.


Thi*_*ter 6

最简单的解决方案是使用jQuery及其$(document).ready(function() { .... });功能.而不是....你自己的代码.

请注意,它基本上与@ Shadow2531建议相同,但也适用于不支持该事件的旧浏览器.

  • 从什么时候开始"使用jQuery"最佳实践?:( @ThiefMaster也"当不使用框架,使用一个"是侮辱性建议.进入PHP社区并告诉他们"你做的香草PHP?你应该完全开始使用cakePHP并重写你的网站" (13认同)
  • @ThiefMaster:所以为了挂钩一个事件,"最佳实践"是加载一个完整的框架?不.最佳做法是使用jQuery*,只有当你已经在使用jQuery进行其他工作时*.如果你不是,那么常规的旧JS应该是你要走的路. (12认同)
  • jQuery不是"行业标准".肯定有时它很有用.但如果一个人需要jQuery来完成他们的工作,那么*他们不知道自己的工作*.jQuery不应该随便使用; 它应该在其他方式变得更加复杂时使用 - 如果没有一些知识并且不需要在幕后必须做的额外废话,就不应该使用它. (2认同)
  • 如果 jQuery 已经在页面上使用或者很容易获得并且不过分,那么这是“最简单的解决方案”。一个非常好的答案是结合如何使用 jQuery 和如何使用标准浏览器代码来完成,如 [@Shadow2531](/users /1697)。 (2认同)

Rob*_*t D 6

2015年,您有两种现代浏览器选择:

document.onload

  • 加载文档时会触发此文件,但其他资源(最明显的是图像)未必完成加载.

在window.onload

  • 这将触发文件加载时,所有其他资源(再次,最显着的图像)被加载.

当然,上述两个事件都可以更好地与window.addEventListener()一起使用,因为允许多个侦听器.