2012-03-22 51 views
3

$(document).ready() - 它是如何执行的?游标是否会在该行中等待,以便在DOM创建后执行代码或者在浏览器创建DOM之后,该方法将像事件处理程序一样执行?

如果图像不被下载但$(document).ready()被执行以读取该图像的src属性以在DOM构建之后分配给某个其他本地变量?

+3

无论图像资源是否可在页面中嵌入/可见,图像的src'都将存在于DOM中。但是+1提出的问题直到现在我还没有想过。 =) – 2012-03-22 19:17:19

+1

除此之外,'$(window).load()'在所有资源加载后执行 – Matthew 2012-03-22 19:20:10

回答

3

这是一个事件处理程序,它等待一切下载。它只是等待,直到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"); 
     } 
    } 
} 

http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.ready

1

的。就绪()的代码块进行解析,/它在网页中遇到的时候坦然,但实际执行中的推迟到“准备就绪”条件满足为止。您可以根据需要拥有尽可能多的.ready()块 - 它们不会挂起页面 - 它们设计为不挂起页面。

+0

如果我可以根据需要添加尽可能多的.ready()方法,那么它会按它存在的顺序执行这一页? – deen 2012-03-22 19:31:37

+0

我相信如此,但实际上并不确定。我很少必须使用多个就绪块,并且它们都不依赖于顺序。 – 2012-03-22 19:33:59

相关问题