javascript - JS 脚本应该放在 HTML 文件中的什么位置?

标签 javascript html

如果您有 JS 代码旨在作为加载/构建页面的一部分运行,那么它应该放在 HTML 中的什么位置?例如修改 <div>或者添加一些链接。 这应该放在 <body> 中吗? , 穿插 HTML?或者它应该在 <head> 之间<body>元素?事情发生的顺序是什么 - 它们在页面中的顺序还是 HTML 是否全部发生在(非 <head>)JS 运行之前?

最佳答案

If you have JS code which is intended to run as part of loading/building the page, where in the HTML should this go?

收盘前</body>标签正在成为最佳实践,除非有特定要求将其放在其他地方(有时可能会有)。这是 recommendation of the YUI folks ,例如,但不仅仅是他们。

What order do things happen in - the order they are in the page or does HTML all happen before (non-) JS is run?

script遇到标记,除非您使用 defer or async attribute (并且浏览器支持它们),所有 HTML 解析都戛然而止,脚本被下载并交给 JavaScript 解释器。当 JavaScript 解释器完成处理脚本时,HTML 解析器可以继续。它必须这样做,因为 JavaScript 可以通过 document.write 将标记插入到 HTML 流中。 .这也是为什么您可以加载一个脚本文件,然后加载依赖于第一个脚本文件的第二个脚本文件,并且知道它们将以正确的顺序加载。 也是为什么你不能从更高层的脚本访问 HTML 流中更底层的元素,除非你以某种方式推迟你的代码(window.onload 或许多库的“DOM 加载”事件支持,例如 jQuery 的 ready 或 Prototype 的 dom:loaded )。

这样做的一个结果是,将 script head 中的标签实际上会减慢页面的明显加载时间,除非那些 script出于某种原因,标签需要在那里。因此建议将它们放在收盘前 </body>标签。

但是,您必须注意一个“陷阱”:如果您希望使用 JavaScript 响应页面的某些部分(如果用户已启用它),那么在最后加载脚本会留下一个简短但真实的结果存在竞争条件:用户可以在下载脚本时与页面进行交互。有多种处理方法。我最喜欢的是在 head 中检测是否使用 内联 脚本(不是单独的文件)启用了 JavaScript元素,如果是这样,则尽可能为事情放置一个文档级处理程序(例如,您可以使用 click 事件执行此操作),这基本上会在非常短的时间内排队或禁用点击。这样,如果启用了 JavaScript,您将避免竞争条件,但如果未启用,任何 unobtrusive您已准备好的后备措施将起作用。

关于javascript - JS 脚本应该放在 HTML 文件中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220313/

相关文章:

javascript - 移动版 Safari 浏览器的滚动问题

javascript - 在强制布局中添加下拉菜单 (d3.js)

javascript - 学习 Chartjs .destroy()

javascript - Jquery 选择子项中的所有子项

javascript - 个人数据间隔 bootstrap carousel 4

javascript - 根据其顶点之一的位置调整 div 的大小

javascript - touchmove 事件并不总是在 Android 版 Chrome 上触发

javascript - 在 DataTables 表加载 Ruby on Rails 时显示微调器

javascript - 检测 iPhone 结束事件

javascript - 如何使用 jquery easing 重置动画图像的边距?