了解文档就绪事件

时间:2010-07-29 15:34:27

标签: javascript jquery domready

嘿,我刚刚为我的JS&编写另一个基本脚本jQuery练习,当我意识到这实际上包含了什么时,我刚刚抽出了goold ol'文档就绪事件,我想知道我是否正确:

这是jQuery准备好的文档:

$(document).ready(function(){});

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

(document)是一个选择器,指的是DOM的“最高”部分(除了Window?)。

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

(function(){});

这部分让我有点困惑。

我知道一旦我们的文档加载了,它就会运行我们的脚本。换句话说,它会运行我们的功能吗?我们的整个脚本是否被视为一种功能?而且,它只是一个很大的JavaScript声明,对吗?因为它以分号结尾。另外,为什么我们的脚本通常介于大括号之间,而不是函数的括号?有什么区别?

非常感谢,抱歉n00by的问题,我只是好奇!的xD

7 个答案:

答案 0 :(得分:15)

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

  

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

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

// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

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

  

(document)是一个选择器,指的是DOM的“最高”部分(除了Window?)。

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

  

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

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

  

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

目前,当您调用ready时,jQuery的源代码并不关心传入的选择器。这是准备好的功能:

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,什么都没有,或任何你想要的东西。

$({
    an: 'object', 
    that: 'has', 
    nothing: 'to', 
    'do': 'with', 
    ready: 'event'
}).ready(function() { .. });

它仍然可以使用。

  

(function(){});

     

这部分让我有点困惑。

     

我知道一旦我们的文档加载了,它就会运行我们的脚本。换句话说,它会运行我们的功能吗?

是的,这个以及与ready事件绑定的每个函数都将在DOM准备就绪时执行。

  

我们的整个剧本是否被视为一种功能?

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

<script>
    function hello() { alert("hello"); }
    hello();
</script>
  

而且,它只是一个很大的JavaScript声明,对吗?

不是真的。您可以根据需要巧妙地模块化JavaScript。例如,你可以拥有类似于类,对象,可重用小部件,MVC等架构模式的东西。

  

因为它以分号结尾。

分号与执行某些事情无关。我写得很好。

<script>
    alert("Hello"), alert("World")
</script>

将按顺序工作并提醒两个单词,并且没有分号。

  

另外,为什么我们的脚本通常介于大括号之间,而不是函数的括号?有什么区别?

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

答案 1 :(得分:4)

.ready()功能仅在选择文档时触发。我不相信你可以致电$(body).ready()

基本上,ready()函数接受1个参数 - 一个函数。你可以轻松打电话

$(document).ready(alert)

但我们通常做的是使用function(){}

定义一个匿名函数

你是正确的,因为典型$(document).ready(function(){})中的所有代码只是一个很大的功能。

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

而不是这样做:

function myFunc()
{
  alert('We are in my function');
}
$(document).ready(myFunc)

我们切断了中间人,然后这样做:

$(document).ready(function()
{
  alert('We are in my function');
});

答案 2 :(得分:1)

  1. (document) 不是选择器。它是对“文档”对象的引用。
  2. .ready是对jQuery对象上可用函数的引用。它是.bind("ready", f)
  3. 的简写
  4. (function() { ... })是该事件的处理程序。
  5. 将函数绑定为“就绪”处理程序在概念上与绑定“单击”处理程序没什么不同。

答案 3 :(得分:1)

  

现在,美元符号是简写   jQuery,调用jQuery   库,所以我们可以制作jQuery   语句和调用,正确的?语句和调用,对吗?

  

.ready是一个在什么时候发生的动作   DOM已满载。现在   “DOM”完全加载,是DOM   在这种情况下,指的是什么   选择?所以,如果,身体被选中   而不是文件,脚本   在加载之前执行?在加载之前执行?

没有。只有文档才能触发就绪事件。

这是dom准备就绪时将执行的功能

$(document).ready(function(){alert('ready')})

你好colos alos写道:

$(document).ready(mxFunction)
function mxFunction(){alert('ready')}

答案 4 :(得分:1)

我不同意@eskimoblood “只有文档可以触发就绪事件。”这不是真的,没有文档就绪事件,jQuery和其他库引入了'ready',表明DOM已经准备就绪,不一定要加载。

当所有图像框架和其他资源都已加载时,会触发

window.loaded,因此'ready'将在'loaded'之前触发。看看'DOMContentLoaded',它将为您提供有关'ready'类型事件如何实现的更多详细信息。

答案 5 :(得分:0)

我并没有真正了解JavaScript和jQuery,但语句在{}中,参数在()中。所以()传递给函数{}的是什么函数

答案 6 :(得分:0)

在jQuery中,你可以在事件发生后为任何jQuery事件添加一个函数。

在这种情况下,when the (document) is ready(), run the function(){} within it

在某些情况下,您可以向函数添加参数。例如,当使用jQuery.ajax时,我可以在成功设置中使用参数,以访问从ajax请求返回的数据,并在函数本身中重用该参数。

$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});