$(document).ready()
- 它是如何执行的?游标是否会在该行中等待,以便在DOM创建后执行代码或者在浏览器创建DOM之后,该方法将像事件处理程序一样执行?
如果图像不被下载但$(document).ready()
被执行以读取该图像的src
属性以在DOM构建之后分配给某个其他本地变量?
$(document).ready()
- 它是如何执行的?游标是否会在该行中等待,以便在DOM创建后执行代码或者在浏览器创建DOM之后,该方法将像事件处理程序一样执行?
如果图像不被下载但$(document).ready()
被执行以读取该图像的src
属性以在DOM构建之后分配给某个其他本地变量?
这是一个事件处理程序,它不等待一切下载。它只是等待,直到DOM被构建,并且ready
被转换。从docs:
虽然JavaScript提供了当 呈现页面时执行代码的加载事件,不会被触发此事件,直到如图像的所有资产 已经完全接收。在大多数情况下,只要DOM层次已完全构建,就可以运行 脚本。传递给.ready()的处理程序保证在DOM准备就绪后执行 ,所以这通常是 附加所有其他事件处理程序并运行其他jQuery代码的最佳位置。在使用依赖CSS样式属性的值的 脚本时,重要的是 在引用脚本之前引用外部样式表或嵌入样式元素 之前。
其实背后的代码相当简单。它只是等待document.body
可访问(NOT NULL):
function (wait) {
// Either a released hold or an DOMready/load event and not yet ready
if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if (!document.body) {
return setTimeout(jQuery.ready, 1);
}
// Remember that the DOM is ready
jQuery.isReady = true;
// If a normal DOM Ready event fired, decrement, and wait if need be
if (wait !== true && --jQuery.readyWait > 0) {
return;
}
// If there are functions bound, to execute
readyList.resolveWith(document, [jQuery]);
// Trigger any bound ready events
if (jQuery.fn.trigger) {
jQuery(document).trigger("ready").unbind("ready");
}
}
}
的。就绪()的代码块进行解析,/它在网页中遇到的时候坦然,但实际执行中的推迟到“准备就绪”条件满足为止。您可以根据需要拥有尽可能多的.ready()块 - 它们不会挂起页面 - 它们设计为不挂起页面。
如果我可以根据需要添加尽可能多的.ready()方法,那么它会按它存在的顺序执行这一页? – deen 2012-03-22 19:31:37
我相信如此,但实际上并不确定。我很少必须使用多个就绪块,并且它们都不依赖于顺序。 – 2012-03-22 19:33:59
当DOM准备就绪时会触发它。 Fire when DOM is ready...
无论图像资源是否可在页面中嵌入/可见,图像的src'都将存在于DOM中。但是+1提出的问题直到现在我还没有想过。 =) – 2012-03-22 19:17:19
除此之外,'$(window).load()'在所有资源加载后执行 – Matthew 2012-03-22 19:20:10