我目前正在学习这门课程:jQuery Events。
我知道以下所有陈述都是等同的:
$(document).ready( /*handler*/ );
$().ready( /*handler*/ );
$( /*handler*/ );
我认为$()
与$(document)
相同
但是,当我需要处理整个文档的按键时,我注意到了
$(document).keydown( /*handler*/ );
正在运作
$().keydown( /*handler*/ );
不是。
jQuery $()
选择器匹配的对象是什么?它与document
有什么不同?
答案 0 :(得分:2)
我认为$()!= $(文档),您可以通过以下代码测试此主题:
alert($(document).length); // 1
alert($().length); // 0
$(..)代码导致调用jquery库中的构造函数:
function( selector, context ) {
var match, elem;
// HANDLE: $(""), $(null), $(undefined), $(false)
if ( !selector ) {
return this;
}
// Handle HTML strings
if ( typeof selector === "string" ) {
some code to find element
// HANDLE: $(DOMElement)
} else if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return typeof rootjQuery.ready !== "undefined" ?
rootjQuery.ready( selector ) :
// Execute immediately if ready is not present
selector( jQuery );
}
if ( selector.selector !== undefined ) {
this.selector = selector.selector;
this.context = selector.context;
}
return jQuery.makeArray( selector, this );
}
"返回此"在上面的代码中导致返回没有任何项的jquery对象数组。
所以下面的代码不会将事件处理程序分配给任何元素:
$().keydown( /*handler*/ );
答案 1 :(得分:0)
keydown():在键盘上按下某个键时触发事件。
$(document).ready()让你的事件在窗口加载之前加载你想要它们做的任何东西它的括号内的所有内容都准备好尽早开始。一旦DOM被浏览器注册。
答案 2 :(得分:0)
区别在于
.ready()方法只能在匹配的jQuery对象上调用 当前文档,因此可以省略选择器。
(引自https://api.jquery.com/ready/ )而keydown
方法(docs here)可在jQuery对象上调用以附加句柄,以便检测何时按下一个键。
所以它与ready
方法不同,后者仅在DOM加载 AND 后才会调用。
答案 3 :(得分:0)
$()
不等同于jQuery 1.4+中的$(document)
。 $()
是一个空的jQuery对象。
其中一位jQuery开发人员的正式回答:
$().ready(fn)
仅有效,因为$()
曾是$(document)
的快捷方式(jQuery< 1.4)
所以$().ready(fn)
是一个可读的代码。但人们习惯于做
$().mouseover()
之类的事情以及各种其他疯狂事情。人们必须$([])
来获取一个空的jQuery对象所以在1.4中我们更改了它,因此
$()
给出了一个空的jQuery,我们只是使$().ready(fn)
工作,以免破坏大量代码。
$().ready(fn)
现在只是修补核心,以使其适用于遗留案例。
来源:Q: Why “$().ready(handler)” is not recommended?
$().ready( /*handler*/ )
是一个特例,这就是它起作用的原因。