jQuery ready函数的别名

6

我对创建新的jQuery对象的不同方法感到有些困惑。

相关文档似乎包括: http://api.jquery.com/ready/ http://api.jquery.com/jQuery/

从这两个文档中,以下内容是等效的(除了别名或未别名'$'的情况):

  • $(document).ready(handler)
  • $().ready(handler)
  • $(handler)
  • jQuery(function($) {});
  • jQuery(document).ready(function($) {});

是否正确?我有遗漏吗?

3个回答

4
这些方法有些等效:
- `$(document).ready(handler)` - 当 DOM 加载完成后,执行 `handler`。 - `$().ready(handler)` - 当 DOM 加载完成后,执行 `handler`(已经被弃用,请勿使用)。 - `$(handler)` - 在 DOM 加载完成后,执行 `handler`。这是 `$(document).ready(handler)` 的快捷方式。 - `jQuery(function($) {})` - 与上面的 #3 相同,只是使用 `jQuery` 而不是 `$` 别名。 - `jQuery(document).ready(function($) {})` - 与第一个相同,但使用 `jQuery` 而不是 `$` 别名。
如果 `$` 被定义为其他东西,例如 Prototype,则前三个方法将无法使用。最后两个方法类似,它们仅接受传入的第一个参数(`jQuery` 对象),并使其在内部变为 `$`,从而使即使 `$` 是其他内容时也可以使用此方法。
jQuery(function($) {
  $("input").val("something");
});

是的。我认为最值得注意的是已弃用的 $().ready(handler) - karim79

3

好的,还有另外一个方法。从文档中可以看到:

还有 $(document).bind("ready", handler)。 它的行为类似于 ready 方法,但有一个例外:如果 ready 事件已经被触发,并且您尝试使用 .bind("ready") 绑定处理程序,则绑定的处理程序将不会被执行。

其他初始化方法始终会运行……因此,例如在多个文件中声明 $(document).ready(function() { //stuff } 并且处理程序总是会运行。

我更倾向于使用 jQuery(document).ready(function($) {}) 或者 $(document).ready(function() {})……我发现它们更易读。

另一种方法是在关闭 body 标签之前调用脚本,在其中执行以下操作,

(function($) {
    //stuff
})(jQuery);

如果您需要避免与使用$的其他库发生冲突。这是一个自执行的匿名函数,它允许您在其作用域中使用别名,而不必担心来自其他库的冲突。


2
jQuery(function($){ }); 允许您同时使用 $ 而不会发生冲突,并在 DOM 就绪时执行 :) - Nick Craver
是的,我认为jQuery(document).ready(function($) {})更易读一些,尽管它可能并没有太大的区别。自执行匿名函数示例可以提高性能,因为您将代码放置在 body 标签结束之前。 - dianovich

0

如果你只是使用jQuery,那么$()等同于jQuery()。这样就涵盖了其中的一半。

然后,如果你使用$()代替$(document).ready,它们是相同的。在这种情况下,它只是一个帮助函数。你可能想要在其他地方添加ready,例如,在这种情况下,你会这样做:$(foo).load({})

最后,我不知道你说的$().ready是什么意思,因为你必须传递参数。


啊,难怪我从未看到 $() 没有参数。它已经被弃用了。 - Amir Raminfar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接