嘿,我只是在为我的JS & jQuery实践写另一个基本脚本,我只是在抽出goold ol‘document-ready事件时,我意识到这实际上是由什么组成的,我想知道我是对的还是错的:
下面是为jQuery准备好的文档:
$(document).ready(function(){});现在,美元符号是jQuery的缩写,它调用jQuery库,所以我们可以执行jQuery语句和调用,对吗?
(document)是一个选择器,它引用DOM的“最高”部分(而不是Window?)。
.ready是当DOM完全加载时发生的操作。现在," DOM“是完全加载的,这种情况下的DOM是指被选择的内容吗?因此,如果选择body而不是document,脚本是否会在加载之前执行?
(function(){});这部分让我有点困惑。
我知道一旦我们的文档加载完毕,它就会运行我们的脚本。换句话说,它会运行我们的函数吗?我们的整个脚本被认为是一个函数吗?而且,这只是一个很大的JavaScript语句,对吗?因为它以分号结尾。另外,为什么我们的脚本通常在大括号之间,而不是在函数的圆括号之间?有什么关系?
非常感谢,很抱歉问了n00by这个问题,我只是好奇!xD
发布于 2010-07-30 00:01:51
哇,这是一个答案的一大堆问题:)
现在,美元符号是jQuery的缩写,它调用jQuery库,所以我们可以进行jQuery语句和调用,对吗?
是的,$和jQuery指的是同一个对象。取自jQuery的源代码:
// 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时传入了什么选择器。下面是准备好的函数:
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或任何你想要的东西。
$({
an: 'object',
that: 'has',
nothing: 'to',
'do': 'with',
ready: 'event'
}).ready(function() { .. });而且它仍然可以工作。
(function(){});
这部分让我有点困惑。
我知道一旦我们的文档加载完毕,它就会运行我们的脚本。换句话说,它会运行我们的函数吗?
是的,当DOM准备就绪时,将执行与ready事件绑定的此函数和每个函数。
我们的整个脚本都被认为是一个函数吗?
不,不是整个脚本。仅依赖于DOM的项。有些东西需要在找到的时候进行处理。考虑一下jQuery库本身。在处理之前,它不会等待任何DOM就绪事件。如果您编写了一条JavaScript语句,除非它是一个类似于您传递给ready(..)的回调函数,否则它将按照找到它的顺序进行处理。因此,无论DOM是否加载,下面的代码都将立即执行并警告"hello“。
<script>
function hello() { alert("hello"); }
hello();
</script>和,这只是一个很大的JavaScript语句,对吧?
不怎么有意思。你可以像你想的那样灵活地模块化你的JavaScript。例如,您可以拥有类似于类、对象、可重用的小部件、体系结构模式(如MVC等)的东西。
,因为它以分号结尾。
分号与什么时候执行没有关系。我可以写得很好。
<script>
alert("Hello"), alert("World")
</script>这将工作并按顺序警告这两个单词,并且没有分号。
还有,为什么我们的脚本通常在大括号之间,而不是在函数的圆括号之间?有什么关系?
它是如何在JavaScript和其他几种语言中定义函数的。复习你的基本技能,以便更好地理解。不要将其称为脚本,因为它只会混淆问题。它只是一个函数,里面有一些语句。
发布于 2010-07-29 23:41:43
仅当选择了document时,才会触发.ready()函数。我不相信你可以打电话给$(body).ready()
基本上,ready()函数只有一个参数--一个函数。您可以很容易地调用
$(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');
});发布于 2010-07-29 23:38:30
(document) is a选择器。它是对“文档”的引用,object..ready是对jQuery对象上可用函数的引用。这是事件处理程序.bind("ready", f)(function() { ... })的简写。将函数绑定为“就绪”处理程序在概念上与绑定“单击”处理程序没有什么不同。
https://stackoverflow.com/questions/3364255
复制相似问题