四种不同的jQuery ready()用法 - 有什么区别?

10

我看到了四种不同的方式告诉jQuery在文档就绪时执行一个函数。这些是等价的吗?

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

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

$(function () {
  alert('$()');
});     

jQuery(function ($) {
  alert('jQuery()');
}); 

2
顺便说一下,我觉得$(window).ready(...)也可以用。 - geowa4
4个回答

13

没有区别。

$jQuery是相同的。如果您查看未压缩的源代码,会看到var $ = jQuery = ...或类似的内容。

jQuery函数检查其参数的类型,如果它是一个函数,则与$(document).ready(...)相同。

调用没有参数的jQuery默认使用document。 因此,$()$(document)是相同的。 在Firebug中尝试一下。


2
这并没有解释第二个。 - Draemon
糟糕,我以为我已经全部解决了。等一下。 - geowa4
2
它是默认使用文档还是因为在未传递参数的情况下通过链接返回 jQuery 的结果? - Dave Archer
1
既然你指出来了,$(window).ready()和$(document).ready()之间有什么区别吗? - Patrick McElhaney
1
@David:在Firebug中运行$(),你会看到结果是具有1个元素——document的jQuery。 - geowa4
显示剩余4条评论

5

关于$() == $(document)的评论,Geroge IV是正确的。从未压缩的源代码(init是内部调用的函数)中可以看出:

init: function( selector, context ) {
    // Make sure that a selection was provided
    selector = selector || document;

另外,从源代码中备份以前的对话:

// HANDLE: $(function)
    // Shortcut for document ready
    } else if ( jQuery.isFunction( selector ) )
        return jQuery( document ).ready( selector );

这应该是社区维基。我一直对jQuery的内部运作感兴趣,现在有了一个借口开始研究 :-)


我不知道如何做,或者是否可以做到,但我已经打开了一个链接到这个页面 :-D。 - Dave Archer

1
此外,应该提到的是,您传递给函数的符号将在函数内部使用。例如:
$(function(jQuery) {
   // now I can use jQuery instead $
   jQuery("body").append("<div></div>"); // adds div to the end of body element
}); 

如果你想使用 $,可以将函数的参数在this情况下留空。
你可以在这里找到真实的例子http://jsfiddle.net/yura_syedin/BNgd4/

0

这里还有一个 - 开始就像这样...

(function (jQuery) {

然后完成...

})(jQuery);

一个例子在这里: http://jsfiddle.net/C2qZw/23/

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