如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?

Posted

技术标签:

【中文标题】如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?【英文标题】:Do jQuery scripts still need $(document).ready if they are loaded after all of the page HTML?如果在所有页面 HTML 之后加载 jQuery 脚本,它们是否仍然需要 $(document).ready? 【发布时间】:2012-05-10 16:35:03 【问题描述】:

如果我在所有页面 html 下方加载我的 jQuery 脚本,我是否还需要等待 $(document).ready 才能使用 jQuery 来查找页面中的元素?

【问题讨论】:

“技术上”,是的——“实际上”,不是。多年来,这一直是浏览器的一致(未定义)行为。但是,我相信ready 和 IE 中的框架可能会有一些魔力......脚本仍然应该在 inside 正文标记中。 另外,“页脚”是指<footer><body> 的末尾还是...? jquery - Is $(document).ready necessary? 的可能重复项 【参考方案1】:

您确实需要使用 jQuery 的ready 函数,但您的代码必须牢记这一点。任何 click 或其他基于绑定的处理程序可能无法正确附加到选择器,但是,live$.ajax 等其他处理程序可能会按预期运行。

在使用脚本加载器或 AMD 使用这种方法时要小心。 jQuery 必须 可用并且加载时必须阻塞。在 head 中加载 jQuery 和其他 dep。

很好地了解了这种技术,它描述了这对于 jQuery 的功能来说并不是必需的(不一定是关于在页脚中的使用):

http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/

【讨论】:

(该链接谈到在 HEAD 位置使用脚本,但不是在 FOOT 位置使用脚本。) 它适用于执行前 DOM 中可用的任何内容。之后通过任何方式加载的任何内容,例如 ajax 或在后续文档更改中添加的内容都不会被 jQuery 的click 拾取 但是ready 如何解决这个问题(通过脚位脚本)? 在这些示例中,他们使用 liveajax,而不是依赖于 DOM。我会更新文章。 @pst ready 是一个事件,它告诉浏览器在加载 dom 之前不要运行脚本。所以如果它在头部,它不会运行,直到身体的其余部分都被加载。【参考方案2】:

不,如果脚本位于这些元素下方,则与页面上的 DOM 元素交互的任何代码都不需要 $(document).ready

最好将它们放在结束 </body> 标记之前。

【讨论】:

HTML 标签只有两个有效的子标签,head 和 body,所以我可能会说将脚本标签放在结束的 body 标签内不仅仅是一个好习惯。无效的 HTML 解析器可能会很奇怪【参考方案3】:

否,因为文档已经加载。 Dom 从上到下加载。我个人喜欢把我所有的js放在页面底部而不是头部。

但是它只有 1 行代码,我建议使用它只是为了安全。你也可以让它更短。 $(function() $(document).ready(function()) 相同

【讨论】:

我不明白你为什么要使用它只是为了安全;听起来这会不必要地减慢执行速度。 因为总会有一些浏览器配置失败的人,如果它看不到它想要或期望的东西。运行$(function() 一次并不会减慢速度到足以让您关心的程度。查看 ***.com/questions/8160014/… 并阅读 cmets 以获取已接受的答案。使用$(function() 平均需要大约 2-3 毫秒。附带说明一下,如果您使用 php,您可以创建一个函数或类将所有 js 放入 1 $(function() 的 1 个文件中,或者您可以在 js 中执行此操作。研究编程设计模式。

以上是关于如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?的主要内容,如果未能解决你的问题,请参考以下文章

我想用JS HTML CSS JQuery创建一个预加载屏幕(可选),没有后端

jquery+ajax实现查询数据时,JSP页面显示“正在加载中...” ,查询完了之后在页面显示查询出来的数据。

如果在 Jquery 加载页面时在网格中禁用了所有复选框,则如果没有选中复选框并禁用按钮,则发出警报

用JQuery实现页面Loading的效果,即:当页面加载完成前显示Loading的进度条,全部加载完成之后进度条消失

jquery怎么判断页面加载完全

在将jquery更改为3.1.1之后,在IE 10中页面加载后几秒钟内页面没有响应