10

我已经看到了四种不同的方法来告诉 jQuery 在文档准备好时执行一个函数。这些都是等价的吗?

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

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

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

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

4 回答 4

13

没有区别。

$是一样的jQuery。如果您查看未缩小的来源,您会看到var $ = jQuery = ...或类似的东西。

jQuery函数检查其参数的类型,如果是函数,则将其视为$(document).ready(...)

不带参数调用jQuery默认使用document. 所以$()$(document)是相同的。在 Firebug 中尝试一下。

于 2009-07-21T12:44:50.903 回答
5

回复:乔治四世关于 $() == $(document) 的评论是正确的。来自未缩小的来源(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 的内部工作很感兴趣,现在我有了一个开始寻找的借口:-)

于 2009-07-21T13:11:55.577 回答
1

应该提到的是,您传递给函数的符号将在函数内部使用。例如:

$(function(jQuery) {
   // now I can use jQuery instead $
   jQuery("body").append("<div></div>"); // adds div to the end of body element
}); 

如果你想使用 $ - 在这种情况下你可以将函数的参数留空

你可以在这里找到真实的例子http://jsfiddle.net/yura_syedin/BNgd4/

于 2013-09-13T09:42:12.577 回答
0

这是另一个 - 像这样开始......

(function (jQuery) {

然后完成...

})(jQuery);

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

于 2013-03-12T17:33:50.317 回答