首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解文档就绪事件

了解文档就绪事件
EN

Stack Overflow用户
提问于 2010-07-29 23:34:27
回答 7查看 2K关注 0票数 3

嘿,我只是在为我的JS & jQuery实践写另一个基本脚本,我只是在抽出goold ol‘document-ready事件时,我意识到这实际上是由什么组成的,我想知道我是对的还是错的:

下面是为jQuery准备好的文档:

代码语言:javascript
复制
$(document).ready(function(){});

现在,美元符号是jQuery的缩写,它调用jQuery库,所以我们可以执行jQuery语句和调用,对吗?

(document)是一个选择器,它引用DOM的“最高”部分(而不是Window?)。

.ready是当DOM完全加载时发生的操作。现在," DOM“是完全加载的,这种情况下的DOM是指被选择的内容吗?因此,如果选择body而不是document,脚本是否会在加载之前执行?

代码语言:javascript
复制
(function(){});

这部分让我有点困惑。

我知道一旦我们的文档加载完毕,它就会运行我们的脚本。换句话说,它会运行我们的函数吗?我们的整个脚本被认为是一个函数吗?而且,这只是一个很大的JavaScript语句,对吗?因为它以分号结尾。另外,为什么我们的脚本通常在大括号之间,而不是在函数的圆括号之间?有什么关系?

非常感谢,很抱歉问了n00by这个问题,我只是好奇!xD

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-30 00:01:51

哇,这是一个答案的一大堆问题:)

现在,美元符号是jQuery的缩写,它调用jQuery库,所以我们可以进行jQuery语句和调用,对吗?

是的,$jQuery指的是同一个对象。取自jQuery的源代码:

代码语言:javascript
复制
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

window是全局对象。添加到其中的任何内容都将在全球范围内可用,因此您可以将其称为window.$,也可以仅将其称为$

(文档)是一个选择器,它引用DOM的“最高”部分(而不是Window?)。

document不是选择器,而是引用DOM中最顶层节点的DOM object。它还有其他属性,比如document.domain等。它的一个子元素是<html>元素。

.ready是在DOM完全加载时发生的操作。现在," DOM“是完全加载的,这种情况下的DOM是指被选择的内容吗?

是的,DOM指的是我们通常在jQuery选择器中选择的项。更具体地说,它是页面的内存中表示。ready使用针对不同浏览器的一组事件来确定DOM何时加载。

因此,如果选择了body而不是document,脚本是否会在加载之前执行?

目前,jQuery的源代码并不关心调用ready时传入了什么选择器。下面是准备好的函数:

代码语言:javascript
复制
ready: function( fn ) {
    // Attach the listeners
    jQuery.bindReady(); 

    // If the DOM is already ready
    if ( jQuery.isReady ) {
        // Execute the function immediately
        fn.call( document, jQuery );

    // Otherwise, remember the function for later
    } else if ( readyList ) {
        // Add the function to the wait list
        readyList.push( fn );
    }

    return this;
},

既然它并不关心传入了什么选择器,你也可以向它传递body、nothing或任何你想要的东西。

代码语言:javascript
复制
$({
    an: 'object', 
    that: 'has', 
    nothing: 'to', 
    'do': 'with', 
    ready: 'event'
}).ready(function() { .. });

而且它仍然可以工作。

(function(){});

这部分让我有点困惑。

我知道一旦我们的文档加载完毕,它就会运行我们的脚本。换句话说,它会运行我们的函数吗?

是的,当DOM准备就绪时,将执行与ready事件绑定的此函数和每个函数。

我们的整个脚本都被认为是一个函数吗?

不,不是整个脚本。仅依赖于DOM的项。有些东西需要在找到的时候进行处理。考虑一下jQuery库本身。在处理之前,它不会等待任何DOM就绪事件。如果您编写了一条JavaScript语句,除非它是一个类似于您传递给ready(..)的回调函数,否则它将按照找到它的顺序进行处理。因此,无论DOM是否加载,下面的代码都将立即执行并警告"hello“。

代码语言:javascript
复制
<script>
    function hello() { alert("hello"); }
    hello();
</script>

和,这只是一个很大的JavaScript语句,对吧?

不怎么有意思。你可以像你想的那样灵活地模块化你的JavaScript。例如,您可以拥有类似于类、对象、可重用的小部件、体系结构模式(如MVC等)的东西。

,因为它以分号结尾。

分号与什么时候执行没有关系。我可以写得很好。

代码语言:javascript
复制
<script>
    alert("Hello"), alert("World")
</script>

这将工作并按顺序警告这两个单词,并且没有分号。

还有,为什么我们的脚本通常在大括号之间,而不是在函数的圆括号之间?有什么关系?

它是如何在JavaScript和其他几种语言中定义函数的。复习你的基本技能,以便更好地理解。不要将其称为脚本,因为它只会混淆问题。它只是一个函数,里面有一些语句。

票数 15
EN

Stack Overflow用户

发布于 2010-07-29 23:41:43

仅当选择了document时,才会触发.ready()函数。我不相信你可以打电话给$(body).ready()

基本上,ready()函数只有一个参数--一个函数。您可以很容易地调用

代码语言:javascript
复制
$(document).ready(alert)

但是我们通常做的是用function(){}定义一个匿名函数

您说得对,典型$(document).ready(function(){})中的所有代码都只是一个大函数。

我们的脚本在花括号之间,因为这是你定义函数的方式。

而不是这样做:

代码语言:javascript
复制
function myFunc()
{
  alert('We are in my function');
}
$(document).ready(myFunc)

我们去掉中间人,这样做:

代码语言:javascript
复制
$(document).ready(function()
{
  alert('We are in my function');
});
票数 4
EN

Stack Overflow用户

发布于 2010-07-29 23:38:30

  1. (document) is a选择器。它是对“文档”的引用,object.
  2. .ready是对jQuery对象上可用函数的引用。这是事件处理程序.bind("ready", f)
  3. (function() { ... })的简写。

将函数绑定为“就绪”处理程序在概念上与绑定“单击”处理程序没有什么不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3364255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档