gdo*_*ica 88 javascript jquery callback document-ready
从jQuery的API文档的网站为ready
以下所有三种语法都是等效的:
- $(文件).就绪(句柄)
- $().ready(处理程序)(不建议这样做)
- $(句柄)
做完作业后 - 阅读和播放源代码,我不知道为什么
$().ready(handler)
Run Code Online (Sandbox Code Playgroud)
不推荐.第一种和第三种方式完全相同,第三种方法在缓存的jQuery对象上调用ready函数document:
rootjQuery = jQuery(document);
...
...
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
Run Code Online (Sandbox Code Playgroud)
但是ready函数没有与所选节点元素的选择器交互,ready源代码:
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
// Add the callback
readyList.add( fn );
return this;
},
Run Code Online (Sandbox Code Playgroud)
如您所见,它只是将回调添加到内部队列(readyList)并且不会更改或使用集合中的元素.这使您可以ready在每个jQuery对象上调用该函数.
喜欢:
$('a').ready(handler) DEMO$('fdhjhjkdafdsjkjriohfjdnfj').ready(handler) DEMO$().ready(handler) DEMO最后......对我的问题:为什么$().ready(handler)不推荐?
gdo*_*ica 87
我得到了一位jQuery开发人员的正式回答:
$().ready(fn)只能工作,因为$()曾经是$(document) (jQuery <1.4)的快捷方式
所以$().ready(fn)是一个可读的代码.
但人们习惯于做$().mouseover()各种各样的事情和各种其他疯狂事件.
人们不得不做$([])一个空的jQuery对象
所以在1.4中我们改变它所以$()给出一个空的jQuery,我们只是做了$().ready(fn)工作,以免破坏很多代码
$().ready(fn) 实际上现在只是修补核心,以使其适用于遗留案例.
功能的最佳位置ready是$.ready(fn),但这是一个非常古老的设计决定,这就是我们现在拥有的.
我问他(过去式:
你认为$(fn)比$().ready(fn)更具可读性吗?
他的回答是:
我总是在实际应用程序中执行$(document).ready(fn),并且通常在应用程序中只有一个doc ready块,它不完全像维护一样.
我认为$(fn)也是非常难以理解的,它只是你必须知道的一件事 ......
Jon*_*Jon 11
由于不同的选项与你指出的几乎完全相同,所以是时候戴上图书馆作家的帽子并做出一些猜测.
也许jQuery人员希望$()将来可以使用(有疑问,因为$().ready有记录的工作,即使不推荐;它也会污染$if特殊情况下的语义).
一个更实际的原因:第二个版本是唯一一个没有最终包装的版本document,因此在维护代码时更容易破解.例:
// BEFORE
$(document).ready(foo);
// AFTER: works
$(document).ready(foo).on("click", "a", function() {});
Run Code Online (Sandbox Code Playgroud)
与此形成鲜明对比
// BEFORE
$().ready(foo);
// AFTER: breaks
$().ready(foo).on("click", "a", function() {});
Run Code Online (Sandbox Code Playgroud)与上述相关:ready在某种意义上它是一个怪胎,它是(唯一的?)方法,无论jQuery对象包装什么都会起作用(即使它没有包装任何东西,就像这里的情况一样).这是与其他jQuery方法的语义的主要区别,因此特别不鼓励依赖于此.
更新:正如Esailija的评论指出的那样,从工程角度来看,它ready应该是一种静态方法,因为它的工作方式是这样的.
更新#2:在源头挖掘,似乎在1.4分支中的某个点$()被更改为匹配$([]),而在1.3中它表现得像$(document).这一改变将加强上述理由.
| 归档时间: |
|
| 查看次数: |
3610 次 |
| 最近记录: |