$(document).ready()
- 它是如何被执行的?在创建DOM之后光标是否会在该行中等待以执行代码,或者在浏览器创建DOM之后,此方法将像事件处理程序一样执行?
如果图像没有被下载但是$(document).ready()
被执行以读取该图像的src
属性以在DOM构造之后分配给其他一些局部变量,该怎么办?
答案 0 :(得分:3)
这是一个事件处理程序,它不等待下载的所有内容。它只等待DOM构造并且ready
被转换。来自docs:
当JavaScript提供用于执行代码的load事件时 页面呈现,此事件在所有资产之前都不会被触发 如图像已被完全接收。在大多数情况下, 只要DOM层次结构完全可以运行脚本 建造。传递给.ready()的处理程序是保证的 在DOM准备好之后执行,所以这通常是最好的地方 附加所有其他事件处理程序并运行其他jQuery代码。使用时 依赖于CSS样式属性值的脚本,这很重要 以前引用外部样式表或嵌入样式元素 引用脚本。
背后的代码实际上相当简单。它等待document.body
可以访问(非空):
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");
}
}
}
答案 1 :(得分:1)
.ready()代码块在页面中遇到时被解析/准备,但实际执行被推迟到满足“就绪”条件。您可以拥有任意数量的.ready()块 - 它们不会挂起页面 - 它们的设计不会挂起页面。
答案 2 :(得分:0)
当DOM准备好时它被触发了。 Fire when DOM is ready...