【问题标题】: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 performance footer


【解决方案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() {} 一次并不会减慢速度到足以让您关心的程度。查看 stackoverflow.com/questions/8160014/… 并阅读 cmets 以获取已接受的答案。使用$(function() {} 平均需要大约 2-3 毫秒。附带说明一下,如果您使用 php,您可以创建一个函数或类将所有 js 放入 1 $(function() {} 的 1 个文件中,或者您可以在 js 中执行此操作。研究编程设计模式。
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多