【发布时间】:2011-06-14 17:32:43
【问题描述】:
$(document)和$("document")之间有什么区别吗?
编辑:当进入.ready() 例如$("document").ready()
【问题讨论】:
标签: javascript jquery document
$(document)和$("document")之间有什么区别吗?
编辑:当进入.ready() 例如$("document").ready()
【问题讨论】:
标签: javascript jquery document
$(document) 使用 jQuery 包装全局 document 对象。
$("document") 试图寻找<document> 元素,这在HTML 中显然没有意义,因为没有这样的元素,只有document 元素在标记中表示的根<html> 对象。它的行为是这样的,因为通过向 jQuery 函数传递一个字符串,您实际上是在给它一个 selector。
重新编辑:正如patrick dw 所说,在ready() 的上下文中没有区别,实际上从jQuery 3.0 开始,完全不使用$(document) 或显式调用ready() 已被弃用。来自documentation:
jQuery 提供了几种附加函数的方法,该函数将在 DOM 准备好时运行。以下所有语法都是等效的:
$( handler )$( document ).ready( handler )$( "document" ).ready( handler )$( "img" ).ready( handler )$().ready( handler )从 jQuery 3.0 开始,只推荐第一种语法;其他语法仍然有效,但已被弃用。这是因为选择与
.ready()方法的行为无关,该方法效率低下并且可能导致对该方法行为的错误假设。例如,第三种语法适用于"document",它什么都不选。第四种语法等待文档准备好,但暗示(错误地)它等待图像准备好。
【讨论】:
如果您正在谈论调用.ready() 函数,它(当前)没有区别。
在这两种情况下,参数都会被忽略。
你可以这样做:
$( "cheese pizza" ).ready(function() {});
要明确一点,最好使用官方支持的对.ready()的调用,它们是:
$(document).ready(function(){/*...*/});
和:
$(function(){/*...*/});
实际选择document时,应使用$(document)。
【讨论】:
.ready() 调用适用于任何jQuery 对象吗?如果这是真的,那你为什么不能使用$.ready(...)?
$.fn.ready(),尽管它不受官方支持。 jsfiddle.net/tmpTG
.ready() 的情况下确实如此-$(document) 在功能上真的与空的jQuery 对象相同吗?我从来没有真正考虑过。
您的第一个示例将在您的 JS 中搜索名为 document 的变量或对象。 (注意,它是一个预定义的变量)
第二个将在页面中搜索名称为“document”的标签。
var document = 'div#logo';
$(document); //will search for div#logo
$('document'); //will search for document
【讨论】:
document 是一个预制的全局变量,表示当前 HTML 文档,是 window.document 的缩写。
$("document"),正如@BoltClock 指出的那样,将使用该字符串作为<document> 元素的选择器。
【讨论】: