jquery ready函数源代码研究

yizhihongxing

下面是jquery ready函数源代码研究的完整攻略。

1. 什么是 ready 函数

ready 函数是 jQuery 中的一个特殊函数,它会在页面的 DOM 结构加载完成后才会执行。因为在 DOM 结构没加载完成之前,页面中的元素还没有准备好,所以如果在此时通过 jQuery 对页面元素进行操作,可能会导致一些错误。

2. ready 函数的源码研究

在 jQuery 中,ready 函数实际上是 jQuery.fn.ready 函数的别名。jQuery.fn.ready 函数的源码如下:

// A $( document ).ready() callback
jQuery.fn.ready = function( fn ) {

    // Add the callback
    jQuery.ready.promise().done( fn );

    return this;
};

可以看到,jQuery.fn.ready 函数的作用就是往 jQuery.ready.promise() 中添加一个回调函数。等到 DOM 结构加载完成后,jQuery.ready.promise() 会触发 done 方法,从而执行我们传入的回调函数。

那么,jQuery.ready.promise() 又是什么呢?

// The deferred used on DOM ready
var readyList;

jQuery.fn.ready = function( fn ) {

    // ...

    // If DOM ready is already complete, fire the callback
    if ( jQuery.isReady ) {
        fn.call( document, jQuery );
    } else {

        // Add the callback
        readyList.then( fn );
    }

    return this;
};

jQuery.ready.promise = function( obj ) {
    if ( !readyList ) {

        // ...

        // Create a deferred that resolves when document is ready
        if ( document.readyState === "complete" ||
            ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {

            // Handle it asynchronously to allow scripts the opportunity to delay ready
            window.setTimeout( jQuery.ready );

        } else {

            // Use the handy event callback
            document.addEventListener( "DOMContentLoaded", completed );

            // A fallback to window.onload, that will always work
            window.addEventListener( "load", completed );
        }
    }
    return readyList.promise( obj );
};

可以发现,jQuery.ready.promise() 的主要作用是创建一个 deferred 对象,在 DOM 结构加载完成后,会通过执行 jQuery.ready() 函数来触发 deferred 对象的完成函数。

如果 DOM 结构已经加载完成,则会直接执行回调函数;否则会通过添加事件监听来等待 DOM 加载完成。等到 DOM 加载完成后,jQuery.ready() 函数就会执行,从而触发 deferred 对象的完成函数,从而执行对应的回调函数。

3. 如何使用 ready 函数

使用 ready 函数非常简单,只需要传入一个函数作为回调函数即可:

$(document).ready(function() {
    // DOM 加载完成后执行的代码
});

另外,由于 ready 函数是 jQuery 的方法之一,因此我们也可以使用简写的方式来调用它:

$(function() {
    // DOM 加载完成后执行的代码
});

4. 示例说明

示例1: DOM 加载完成后,修改页面中的标题

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>jQuery ready 示例</title>
    <script src="jquery.js"></script>
    <script>
        $(function() {
            $('title').text('jQuery ready 示例 - 页面标题已修改!');
        });
    </script>
</head>
<body>
    <h1>jQuery ready 示例</h1>
    <p>DOM 加载完成后,修改页面中的标题</p>
</body>
</html>

在这个示例中,我们使用 $(function() {}) 的方式来注册 ready 函数,等到 DOM 加载完成后,就会执行我们注册的回调函数,从而修改页面中的标题。

示例2: 只有在登录状态下才显示隐藏区域

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>jQuery ready 示例</title>
    <script src="jquery.js"></script>
    <script>
        $(function() {
            // 如果当前是登录状态,则显示隐藏区域
            if (isLoggedIn()) {
                $('#hidden').show();
            }
        });

        function isLoggedIn() {
            // 省略代码,根据一些条件判断是否登录
            return true;
        }
    </script>
</head>
<body>
    <h1>jQuery ready 示例</h1>
    <p>只有在登录状态下才显示隐藏区域</p>
    <div id="hidden" style="display:none;">这是一个隐藏的区域,只有在登录状态下才会被显示出来。</div>
</body>
</html>

在这个示例中,我们同样使用 $(function() {}) 的方式来注册 ready 函数,等到 DOM 加载完成后,就会执行我们注册的回调函数。在这个回调函数中,我们调用了一个自定义的函数 isLoggedIn() 来判断当前是否登录,如果是登录状态,则显示隐藏区域。这个隐藏区域初始时是隐藏的,只有通过 JS 代码才会把它显示出来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery ready函数源代码研究 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery Mobile页面保持原生选项

    当在jQuery Mobile中创建一个表单时,默认情况下会将所有组件样式应用到每个表单元素中,这使得表单在不同平台和移动设备上看起来与原生UI不一致。为了解决这个问题,我们可以使用”data-enhance”属性来控制元素的外观样式并保持原生选项。以下是详细的攻略: 第一步:禁用全局选项 全局选项是指开启了$.mobile.autoInitializePa…

    jquery 2023年5月12日
    00
  • jQuery $.proxy()方法

    jQuery $.proxy()方法用于更改函数的上下文(即this关键字的值)。它返回一个新函数,该函数具有指定的上下文和参数。 以下是$.proxy()的详细略: 语法 $.proxy(function, context, [additionalArguments]) 参数 function:必需,要更改上文的函数。 context:必需,要设置为函数上…

    jquery 2023年5月9日
    00
  • jquery each的几种常用的使用方法示例

    下面我来为你详细讲解 “jquery each的几种常用的使用方法示例”,并提供两个示例: jQuery each方法简介 jQuery的each方法是一个循环遍历jQuery对象元素的函数。它类似于JavaScript中的forEach()函数,但更加灵活,可以处理任何类型的集合。 1. each方法的基本写法 $.each方法接受两个参数:要遍历的对象和…

    jquery 2023年5月28日
    00
  • jQuery UI的Selectable unselecting事件

    jQuery UI的Selectable unselecting事件详解 jQuery UI的Selectable插件是一个可选择的插件,它允许用户通过单击或拖动来选择元素。其中,unselecting事件是其中一个事件,它在选择操作将取消时触发。在本文中,我们将详细介绍jQuery UI的Selectable unselecting事件的用法和示例。 un…

    jquery 2023年5月11日
    00
  • jQWidgets jqxTree refresh()方法

    jQWidgets jqxTree refresh() 方法 jqxTree 是 jQWidgets 提供的一个树形组件,它可以展示层级结构的数据支持多种交互操作。jqxTree 提供了 refresh() 方法,用于树形组件的数据。 refresh() 方法 refresh() 方法用于刷新树形组件的数据。当形组件的数据源发生变化时,可以调用该方法刷新组件…

    jquery 2023年5月11日
    00
  • jQWidgets jqxListBox dropAction属性

    jqxListBox 是 jQWidgets 提供的一种列表框控件,用于在 Web 应用程序中创建列表。dropAction 属性在拖动 jqxListBox 控件中的项并释放鼠标按钮时触发。以下是 jqxListBox 的 dropAction 属性的详细说明: dropAction 属性 dropAction 属性在拖动 jqxListBox 控件中的项…

    jquery 2023年5月10日
    00
  • jQuery插件simplePagination的使用方法示例

    使用jQuery插件simplePagination,可以方便地实现分页功能。下面就是simplePagination的使用方法示例的完整攻略: 安装simplePagination插件 要使用simplePagination,需要先从GitHub上下载该插件,并将其添加到你的HTML网页中。可以直接使用CDN链接: <script src=&quot…

    jquery 2023年5月28日
    00
  • jquery.tmpl JQuery模板插件

    jquery.tmpl是一个 Jquery 的模板插件,用于处理数据渲染和页面展示。它提供一种轻量级的、易于使用的方式将数据渲染为 HTML 页面。 安装 jquery.tmpl jquery.tmpl 可以通过以下两种方式进行安装: 通过 jsDelivr CDN 引用 <script src="//cdn.jsdelivr.net/jqu…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部