目次
$()
$()的定义
init方法的定义
selector是字符串
selector是DOM元素
selector是函数
修改init的原型
initメソッドの定義
selector は文字列
セレクターは DOM 要素です
セレクターは関数
init

jQueryで$()関数を使用する方法

Jul 21, 2018 am 10:56 AM
javascript jquery ソースコード分析

この記事では、jQuery で $() 関数を使用する方法を説明します。困っている人はぜひ参考にしてください。 jQuery の

$()

一般に jQuery を使用するときは常に $() を使用します。$ はグローバル jQuery を指します。実際には、jQuery() が呼び出され、その結果として jq オブジェクトが返されますが、それを使用する場合、オブジェクトを作成するために new を使用する必要はありません。したがって、$( ) はファクトリー関数であると推測できます。 $()$指向全局的jQuery,所以其实是调用了jQuery(),结果是返回一个jq对象,但我们使用时却不需使用new创建对象,所以可以推测$()是一个工厂函数。

$()的定义

jQuery()src/core.js中定义,若在该方法中调用return new jQuery()则陷入循环,所以调用init()协助构造实例。值得一提的是,jQuery.fn/src/core.js指向了jQuery.prototype

    // Define a local copy of jQuery
    jQuery = function( selector, context ) {

        // The jQuery object is actually just the init constructor 'enhanced'
        // Need init if jQuery is called (just allow error to be thrown if not included)
        return new jQuery.fn.init( selector, context );
    }
ログイン後にコピー

init方法的定义

jQuery.fn.init()src/core/init.js中定义。方法接受三个参数selector, context, root,在方法内部,先判断是否有参数,无参数时返回false

    init = jQuery.fn.init = function( selector, context, root ) {
        var match, elem;

        // HANDLE: $(""), $(null), $(undefined), $(false)
        if ( !selector ) {
            return this;
        }

        // Method init() accepts an alternate rootjQuery
        // so migrate can support jQuery.sub (gh-2101)
        root = root || rootjQuery;

        // Handle HTML strings
        // < xxx > 或 $(#id)
        if ( typeof selector === "string" ) {
            if ( selector[ 0 ] === "<" &&
                selector[ selector.length - 1 ] === ">" &&
                selector.length >= 3 ) {

                // Assume that strings that start and end with <> are HTML and skip the regex check
                match = [ null, selector, null ];

            } else {
                // match[1]是html字符串,match[2]是匹配元素的id
                // selector是id选择器时match[1]为undefined,match[2]是匹配元素的id
                // selector是html字符串,match[1]是html字符串,match[2]为undefined
                match = rquickExpr.exec( selector );
            }

            // Match html or make sure no context is specified for #id
            // 匹配结果非空 且 存在匹配字符串或context空时执行
            // 未为id选择器限定查找范围
            if ( match && ( match[ 1 ] || !context ) ) {

                // HANDLE: $(html) -> $(array)
                if ( match[ 1 ] ) {
                    context = context instanceof jQuery ? context[ 0 ] : context;

                    // Option to run scripts is true for back-compat
                    // Intentionally let the error be thrown if parseHTML is not present
                    // 生成dom节点并合并到this上
                    jQuery.merge( this, jQuery.parseHTML(
                        match[ 1 ],
                        context && context.nodeType ? context.ownerDocument || context : document,
                        true
                    ) );

                    // HANDLE: $(html, props)
                    // 遍历props,添加属性或方法
                    if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
                        for ( match in context ) {

                            // Properties of context are called as methods if possible
                            if ( jQuery.isFunction( this[ match ] ) ) {
                                this[ match ]( context[ match ] );

                            // ...and otherwise set as attributes
                            } else {
                                this.attr( match, context[ match ] );
                            }
                        }
                    }

                    return this;

                // HANDLE: $(#id)
                // 处理id选择器且无context
                } else {
                    elem = document.getElementById( match[ 2 ] );

                    if ( elem ) {

                        // Inject the element directly into the jQuery object
                        this[ 0 ] = elem;
                        this.length = 1;
                    }
                    return this;
                }

            // HANDLE: $(expr, $(...))
            // selector是选择器 context为undefined或context.jquery存在时执行。
            // $(#id,context)或$(.class [, context])等情况
            } else if ( !context || context.jquery ) {
                return ( context || root ).find( selector );

            // HANDLE: $(expr, context)
            // (which is just equivalent to: $(context).find(expr)
            } else {
                return this.constructor( context ).find( selector );
            }

        // HANDLE: $(DOMElement)
        // 传入DOM元素
        } else if ( selector.nodeType ) {
            this[ 0 ] = selector;
            this.length = 1;
            return this;

        // HANDLE: $(function)
        // Shortcut for document ready
        } else if ( jQuery.isFunction( selector ) ) {
            return root.ready !== undefined ?
                root.ready( selector ) :

                // Execute immediately if ready is not present
                selector( jQuery );
        }

        return jQuery.makeArray( selector, this );
    };
ログイン後にコピー

selector是字符串

如果有selector非空,先处理selector是字符串的情况,分为html字符串、$(selector)$(expr, $(...))$(expr, context)四种。如果selector是字符串类型,根据传入的字符串返回生成的dom节点,处理时先用正则匹配,查找html字符串或id。匹配结果非空且存在匹配字符串或context空时说明selctor是html字符串或selector是id选择器且未限定查找上下文。执行处理html字符串时,先确定生成后的节点要插入的document是哪个(即context参数),默认是加载jQuery的document,调用$.parseHTML()生成dom节点并添加到this;如果context是对象,则是$(html, props)的调用,将属性或者方法挂载到dom上,返回生成的jq对象。如果匹配到$(#id)的调用且context空时,则直接调用document.getElementById查找元素,元素存在时将this[0]指向该元素,返回查找结果。

如果selector不是id选择器或context非空,调用find进行查找,如果context非空,则从context开始查找,否则全局查找,将查找结果作为返回值。

selector是DOM元素

接着处理传入参数是Dom元素的情况。将this[0]指向Dom元素,设置jq对象长度为1,并返回this

selector是函数

最后处理$(function(){}),如果存在ready则调用传入函数调用ready(f()),否则传入jQuery,直接调用函数,调用makeArray,将其结果作为返回值。

修改init的原型

init = jQuery.fn.init = function( selector, context, root ) {
    ...
    }
// Give the init function the jQuery prototype for later instantiation
init.prototype = jQuery.fn;
ログイン後にコピー

在原型上定义方法init,然后将init的原型指向jQuery的原型,如果不这么做,则创建的实例的原型是init.prototype,不是jQuery.fn,其实是init的实例而不是jQuery的实例,无法调用在core.js中定义在jQuery.fn

$()

jQuery() の定義は、この中で return が呼び出された場合、<code>src/core.js に定義されます。メソッド new jQuery() はループ内にトラップされるため、インスタンスの構築を支援するために init() が呼び出されます。 jQuery.fn/src/core.jsjQuery.prototype を指していることに注意してください。

rrreee

initメソッドの定義


jQuery.fn.init()src/core/init.jsに定義されています。このメソッドは 3 つのパラメータ selector、context、root を受け取ります。メソッド内では、パラメータが存在するかどうかが最初に判断され、パラメータがない場合は false が返されます。 rrreee

selector は文字列

です

selector が空でない場合は、最初に selector が文字列である場合を処理し、html に分割しますstring, $(selector)、$(expr, $(...))$(expr, context)selector が文字列タイプの場合、処理中に、最初に通常の一致を使用して HTML 文字列または ID を見つけます。一致結果が空ではなく、一致する文字列が存在するか、コンテキストが空の場合、それは、selector が HTML 文字列であるか、selector が ID セレクターであり、検索コンテキストは制限されません。 HTML 文字列を処理するときは、まず、生成されたノードを挿入するドキュメント (つまり、context パラメーター) を決定します。デフォルトでは、jQuery ドキュメントをロードし、$.parseHTML()dom ノードを生成し、<code>this に追加します。context がオブジェクトの場合、これは $(html, props) の呼び出しです。 、および属性、またはメソッドは dom にマウントされ、生成された jq オブジェクトを返します。 $(#id) の呼び出しが一致し、context が空の場合、document.getElementById が直接呼び出され、要素が検索されます。要素が存在する場合、this[0] は要素を指し、検索結果を返します。 selector が ID セレクターではない場合、または context が空でない場合、context の場合は find を呼び出して検索します。が空ではない場合は、 context から検索を開始します。それ以外の場合は、グローバルに検索し、検索結果を戻り値として使用します。

セレクターは DOM 要素です

次に、受信パラメータが Dom 要素である場合を処理します。 this[0] を Dom 要素にポイントし、jq オブジェクトの長さを 1 に設定して、this を返します。

セレクターは関数

です最後に $(function(){}) を処理します。ready が存在する場合は、受信した関数呼び出し を呼び出します。それ以外の場合は jQuery で渡し、関数を直接呼び出し、<code>makeArray を呼び出し、結果を戻り値として使用します。

init

rrreee のプロトタイプを変更する
これを行わない場合は、プロトタイプにメソッド init を定義し、init のプロトタイプを jQuery のプロトタイプにポイントします。 、作成されたインスタンスのプロトタイプは jQuery.fn ではなく init.prototype です。実際には jQuery のインスタンスではなく init のインスタンスです。core.js。jQuery.fn のさまざまな変数とメソッド。
関連する推奨事項:
🎜🎜🎜Ajax を介して Execl ファイルのダウンロードをリクエストする方法🎜🎜🎜🎜🎜 スライスを使用して JS で配列メソッドをカプセル化する🎜🎜🎜🎜🎜

以上がjQueryで$()関数を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? Feb 28, 2024 pm 03:12 PM

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常​​、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

jQueryで要素の高さ属性を削除するにはどうすればよいですか? jQueryで要素の高さ属性を削除するにはどうすればよいですか? Feb 28, 2024 am 08:39 AM

jQueryで要素の高さ属性を削除するにはどうすればよいですか?フロントエンド開発では、要素の高さ属性を操作する必要が生じることがよくあります。要素の高さを動的に変更する必要がある場合や、要素の高さ属性を削除する必要がある場合があります。この記事では、jQuery を使用して要素の高さ属性を削除する方法と、具体的なコード例を紹介します。 jQuery を使用して高さ属性を操作する前に、まず CSS の高さ属性を理解する必要があります。 height 属性は要素の高さを設定するために使用されます

jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する jQuery のヒント: ページ上のすべての a タグのテキストをすばやく変更する Feb 28, 2024 pm 09:06 PM

タイトル: jQuery ヒント: ページ上のすべての a タグのテキストをすばやく変更する Web 開発では、ページ上の要素を変更したり操作したりする必要がよくあります。 jQuery を使用する場合、ページ内のすべての a タグのテキスト コンテンツを一度に変更する必要がある場合があります。これにより、時間と労力を節約できます。以下では、jQuery を使用してページ上のすべての a タグのテキストをすばやく変更する方法と、具体的なコード例を紹介します。まず、jQuery ライブラリ ファイルを導入し、次のコードがページに導入されていることを確認する必要があります: &lt

jQuery を使用してすべての a タグのテキスト コンテンツを変更する jQuery を使用してすべての a タグのテキスト コンテンツを変更する Feb 28, 2024 pm 05:42 PM

タイトル: jQuery を使用して、すべての a タグのテキスト コンテンツを変更します。 jQuery は、DOM 操作を処理するために広く使用されている人気のある JavaScript ライブラリです。 Web 開発では、ページ上のリンク タグ (タグ) のテキスト コンテンツを変更する必要が生じることがよくあります。この記事では、この目標を達成するために jQuery を使用する方法を説明し、具体的なコード例を示します。まず、jQuery ライブラリをページに導入する必要があります。 HTML ファイルに次のコードを追加します。

jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? Feb 29, 2024 am 09:03 AM

jQuery 要素に特定の属性があるかどうかを確認するにはどうすればよいですか? jQuery を使用して DOM 要素を操作する場合、要素に特定の属性があるかどうかを判断する必要がある状況がよく発生します。この場合、jQuery が提供するメソッドを使用してこの関数を簡単に実装できます。以下では、jQuery 要素が特定の属性を持つかどうかを判断するために一般的に使用される 2 つの方法を紹介し、具体的なコード例を添付します。方法 1: attr() メソッドと typeof 演算子 // を使用して、要素に特定の属性があるかどうかを判断します

jQuery における eq の役割と応用シナリオを理解する jQuery における eq の役割と応用シナリオを理解する Feb 28, 2024 pm 01:15 PM

jQuery は、Web ページでの DOM 操作やイベント処理を処理するために広く使用されている人気のある JavaScript ライブラリです。 jQueryではeq()メソッドを利用して指定したインデックス位置の要素を選択しますが、具体的な使い方と応用シーンは以下の通りです。 jQuery では、 eq() メソッドは、指定されたインデックス位置にある要素を選択します。インデックス位置は 0 からカウントされます。つまり、最初の要素のインデックスは 0、2 番目の要素のインデックスは 1 などとなります。 eq() メソッドの構文は次のとおりです。 $("s

jQueryを使用してテーブルに新しい行を追加する方法の紹介 jQueryを使用してテーブルに新しい行を追加する方法の紹介 Feb 29, 2024 am 08:12 AM

jQuery は、Web 開発で広く使用されている人気の JavaScript ライブラリです。 Web 開発中は、JavaScript を使用してテーブルに新しい行を動的に追加することが必要になることがよくあります。この記事では、jQuery を使用してテーブルに新しい行を追加する方法を紹介し、具体的なコード例を示します。まず、jQuery ライブラリを HTML ページに導入する必要があります。 jQuery ライブラリは、次のコードを通じてタグに導入できます。

jQueryで要素に属性値が含まれているかどうかを確認するにはどうすればよいですか? jQueryで要素に属性値が含まれているかどうかを確認するにはどうすればよいですか? Feb 28, 2024 pm 02:54 PM

jQuery では、要素に特定の属性値が含まれているかどうかを確認する必要があることがよくあります。これにより、要素の属性値に基づいてアクションを実行できるようになります。この記事では、jQueryを使って要素に特定の属性値が含まれているかどうかを確認する方法と、具体的なコード例を紹介します。まず、要素の属性を操作するための jQuery の一般的なメソッドをいくつか見てみましょう。 .attr(): 要素の属性値を取得または設定するために使用されます。 .prop(): 要素の属性値を取得または設定するために使用されます。

See all articles