【问题标题】:Is there a difference between $().ready() and $(document).ready()$().ready() 和 $(document).ready() 之间有区别吗
【发布时间】:2010-03-05 02:35:51
【问题描述】:

我见过一些他们只是这样做的代码:

$().ready(function()
{
    ...
});

这比做一个文档选择器要短,但它是一样的吗?

【问题讨论】:

标签: jquery


【解决方案1】:

轻微变化:

$(document).ready(function() {});

等于:

$(function() {});

从 jQuery 1.4 开始:$().ready(function() { }); 不再在所有情况下都正确。来自发行说明:

从 jQuery 1.4 开始,如果您不向 jQuery() 方法传递任何参数,则将返回一个空的 jQuery 集。在以前的 jQuery 版本中,将返回一个包含文档节点的集合。

【讨论】:

  • 根据jquery14.com/day-01/jquery-14,它实际上在 1.4 中仍然有效,但已被弃用。
  • @Justin Ethier - 在某些情况下它无法工作,最好一起避免它,因为它的行为不一样。例如,如果您尝试使用 bind 或 trigger 链接它...在 1.3 中有效,在 1.4 中无效。任何已弃用的东西,如果你想以后更安全,就假装它不存在。我更新了答案以使其更加清晰,这是一个有效的区别,以防有人现在使用它
  • 还需要注意的是,从jQuery 3.0开始,除了$(fn)are deprecated之外的所有形式都准备好了。
【解决方案2】:

Nick 和 Justin 在这里得到了正确的答案,但由于我们正在讨论这个主题,因此我建议不要在全局范围内使用 $ 以确保可移植性。太多的库将它用于自己的目的,如果您需要将它们混合在一起,您可能会遇到兼容性问题。相反,您可以对 jQuery 就绪处理程序使用可选的第一个参数:

jQuery(function($) {

});

这会将$ 设置为该函数范围内对jQuery 的引用。

【讨论】:

  • 在明确基于 jQuery 的项目中,在全局范围内使用 $ 绝对没有问题。
  • 是的,直到它没有明确地基于 jQuery。它需要输入 6 个额外的字符,它可以为您的代码提供面向未来的证明。此外,它实际上可能会使代码运行得稍微快一些,因为 $ 引用在本地范围内。
  • 我同意在函数范围内这是真的,在 document.ready 内部等等,尽管我不得不不同意所有额外的输入现在替换了 $( 和 $. 的查找/替换,我之前不得不取消 jQuery 的范围,并且 Ctrl+Shift+H 能够在大约 20 秒内处理它。 +1,在插件内部和所有这一切都特别重要。
【解决方案3】:

根据jQuery API docs,以下三种语法都是等价的:

  • $(document).ready(handler)
  • $().ready(handler)(但不建议这样做)
  • $(handler)

显然该语法可以使用,但不是推荐的语法。

根据jQuery 1.4 Release Notes:

在 jQuery 1.3 中,jQuery() 返回一个仅包含文档的 jQuery 集。在 jQuery 1.4 中,它返回一个空的 jQuery 集。这对于创建空集和动态添加元素很有用。注意:jQuery().ready() 技术在 1.4 中仍然有效,但已被弃用。请使用 jQuery(document).ready() 或 jQuery(function(){})。

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    相关资源
    最近更新 更多