【问题标题】:How does jQuery element.ready() works?jQuery element.ready() 是如何工作的?
【发布时间】:2013-04-30 12:49:48
【问题描述】:

我使用 Javascript 多年,但从未觉得需要使用像 jQuery 这样的库;在我现在工作的地方使用了这个库,我发现它很有趣,即使我仍然更喜欢坚持纯 Javascript。

问题有理论价值;我想知道.ready 函数在与 DOM 树中的通用元素相关时如何工作。

我找到了关于 .ready() 如何在文档上工作的线程,但这不难看出 jQuery 以某种方式使用了 DOM 事件 DOMContentLoaded,很容易获得。

但是在页面中加载特定元素的捕获不太明显,因为,AFAIK,没有事件发生。

因为 jQuery 是 Javascript,我们可以在文档的每个部分添加事件监听器,我认为 jQuery 不会在元素后添加 <script> 标签来处理其加载事件,否则它不会被执行在解析通过该点之后创建。

我还认为 jQuery 不使用基于 setInterval 的检查,重复检查元素是否已创建,因为它浪费大量资源(尤其是当许多元素具有加载事件时),但它很少会在上下文中触发创建元素。

我可以想象的是,捕捉DOMContentLoaded事件(所以不是在元素加载之后,而是在所有文档加载之后),jQuery调用.ready()人工事件按出现的顺序放置在文档事件中沿着 DOM 树。这是正确的还是 jQuery 找到了解决方法?

我认为,在一个元素的处理程序中,假设 id "myelement", $(#myelement).ready(),如果我们尝试getElementById("someID") 出现在#myelement 之后的另一个元素,我们会获得一个正确的值,而不是如果我们试图在 #myelement 之后放置在 html 中的脚本中获取该元素,我们将获得“未定义”。

那么,(#myelement).ready() 是不是一个虚构的事件处理程序,它响应 DOMContentLoaded 事件中的所有 element.ready() 事件?

抱歉,我写的太多了;希望我清楚

【问题讨论】:

    标签: jquery onload jquery-events document-ready


    【解决方案1】:

    好吧,根据http://api.jquery.com/ready/ready() 函数是在 DOM 准备好(完全加载)后执行的处理程序/函数。继续阅读......

    .... In most cases, the script can be run as soon as the DOM hierarchy has been fully constructed. The handler passed to .ready() is guaranteed to be executed after the DOM is ready,

    同样出处

    以下三种语法都是等价的:

    $(document).ready(handler)
    $().ready(handler) (this is not recommended)
    $(handler)
    

    所以...ready() 函数仅适用于 document,而不适用于单个元素。

    【讨论】:

    • 我理解存在类似 `$('div').ready() 或 $('div').load()、bind() 和类似内容的声明不会被相应的文档。实际上,加载事件与 DOM 加载事件具有相同的限制,显然应该如此。对于我听到的误导性信息,我深表歉意
    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2011-10-19
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多