jquery ready函数源代码研究

下面是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中使用了document和window哪些属性和方法小结

    在jQuery中,我们可以使用document和window对象来访问或操作文档和窗口中的元素及属性。下面详细讲解了一些常用的属性和方法: document对象 1. ready()方法 ready()方法是jQuery中用于执行在DOM树结构加载完成后执行的函数的方法。例如,我们可以使用下面的代码来在DOM加载完成后显示一条提示信息: $(document…

    jquery 2023年5月29日
    00
  • React Hooks核心原理深入分析讲解

    React Hooks核心原理深入分析讲解 React Hooks是React 16.8版本推出的一个新特性,它允许我们在函数组件中使用state和其他的React特性,从而弥补了类组件和函数组件之间的差距。在这篇文章中,我们将深入分析React Hooks的核心原理,并带大家实现自己的Hooks。 useState useState是React Hooks…

    jquery 2023年5月28日
    00
  • jQWidgets jqxSlider布局属性

    jQWidgets是一个强大的JavaScript UI工具库,其中包含了众多的UI组件,其中就包含一个用于创建滑块控件:jqxSlider。jqxSlider提供了许多布局属性来控制滑块的外观和行为。本文将详细解释这些布局属性的含义,并提供两个示例来说明如何使用这些属性。 jqxSlider的布局属性 以下是jqxSlider的布局属性列表: layout…

    jquery 2023年5月11日
    00
  • jQuery UI的Resizable ghost选项

    以下是关于 jQuery UI Resizable ghost 选项的详细攻略: jQuery UI Resizable ghost 选项 jQuery UI Resizable ghost 选项用于设置 resizable 功能的 ghost 元素。ghost 元素是 resizable 功能的一个副本,用于在用户调整大小时提供视觉反馈。该选项可以通过 r…

    jquery 2023年5月11日
    00
  • jQuery attribute=value 选择器

    以下是关于jQuery attribute=value选择器的完整攻略: 什么是jQuery attribute=value选择器? jQuery attribute=value选择器是一种用于选择具有特定属性值的HTML元素的语法。使用jQuery attribute=value选择器,轻松地选择具有特定属性值的HTML元素,并对其进行操作。 如何使用jQ…

    jquery 2023年5月12日
    00
  • jQuery :focus 选择器

    以下是关于jQuery中的:focus选择器的完整攻略: 什么是jQuery中的:focus选择器? jQuery中的:focus选择器是一种用于选择当前获得焦点的元素的语法。使用这个选择器可以轻松选择当前获得焦点的元素对其进行操作。 如何使用jQuery中的:focus选择器? 可以使用以下代码来选择当前获得焦点的元素: $(":focus&qu…

    jquery 2023年5月12日
    00
  • jQWidgets jqxScrollBar值属性

    以下是关于 jQWidgets jqxScrollBar 组件中值属性的详细攻略。 jQWidgets jqxScrollBar 值属性 jQWidgets jqxScrollBar 组件的值属性用于设置或获取滚动条的当前值。 语法 // 获取滚动条的当前值 var value = $(‘#scrollBar’).jqxScrollBar(‘getValue…

    jquery 2023年5月12日
    00
  • jQWidgets jqxSplitter orientation属性

    jQWidgets是一套基于jQuery的UI组件库,其中包括了一个分割器组件(jqwidgets.jqxsplitter.js),它可以将页面中的元素通过拖拽方式划分为几个细分的区域,以便用户可以自由调整各个区域的大小和位置。 其中,jqxSplitter中的orientation属性指定了分割器的方向。具体而言,它可以取两个值:horizontal和ve…

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