jQuery について知っておくべきことは何ですか?
最近、jQuery のソース コードを見てみたいと思い、このブログ「jQuery ソース コードから学んだ 10 のこと」を見つけました
この記事はこのビデオ ブログに基づいており、いくつかの内容を改良して皆さんと共有します。
注:
この記事は 2010 年に書かれました。著者はビデオ内で言及された内容に基づいて、現在のバージョン 1.11 に対応するいくつかの調整を加えました。また、一部は放棄されました。削除されたコンテンツ ページは削除されました。元の作成者に感謝します
ブラック ボックス/ブラック ボックス
ブラック ボックス システムの概念は、入力が与えられた場合に出力を返すシステムであり、ブラック ボックスは実装プロセス。ここで言うjQueryブラックボックスは、jsグローバル変数ウィンドウにjQueryと$を出力するもので、処理はブラックボックス内にカプセル化されており外界と干渉しません。
jQuery バージョン 1.4 のブラック ボックスは、次のような自己実行関数を使用します
(function( window, undefined){})(window)
著者は、ブラック ボックスを実装するためのより一般的な方法を提供しました
undefined = true; (function(window, document, undefined){ if(foo == undefined) { } })(this, document)
jQuery のブラック ボックスには、unknown と呼ばれる 3 番目の仮パラメータがあります、そして、実パラメータを渡すとき、jsで値が渡されていない仮パラメータは値が渡されず、ブラックボックス内の未定義の正確性が保証されます。 js では、未定義にグローバル プロパティ として値を割り当てることができます (例: 上記のコードの unknown = true
) 自己実行関数モードでブラック ボックスを実装するもう 1 つの利点は、圧縮が容易になることです。次のような状況では、ブラック ボックス内の単純な変数を使用するだけで済みます。
(function(A, B, C)){ B.getElementById('') })(this, document)
著者は、次のような、ページの特定の部分を継続的に更新 (継続的に実行) する匿名関数の自己実行の例を多数挙げました
(function loop(){ doStuff(); $('#update').load('awesomething.php',function(){ loop(); }) //setTimeout(loop, 100) })()
jQuery 1.11 バージョンのブラック ボックスは、新しいファクトリーメソッド、この記事では
noConflict の実装については説明しません
この関数には大きな違いはありません 1.11 バージョンのコードは次のとおりです
var // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$; jQuery.noConflict = function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; };
競合防止の実装は以前のメソッドを保存することであることがわかります。最初に JQuery と $ を呼び出し、次に noConflict が呼び出されたときに、それらに
ネイティブ js 属性の名前付けによる変換を与えます
1.4 バージョンでは、props オブジェクトを使用して、jquery の属性操作とネイティブ js 属性操作
の間の対応関係を保存します
jQuery.extend({ propFix: { "for": "htmlFor", "class": "className" }, prop: function( elem, name, value ) { //... name = jQuery.propFix[ name ] || name; }, propHooks: { //... } }); jQuery.each([ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() { jQuery.propFix[ this.toLowerCase() ] = this; });
propFix this オブジェクトには、クラスからclassNameへの変換など、対応する関係テーブルが格納されており、prop関数はこの関係テーブルの処理を担当します。 以下のそれぞれは非常に興味深いものです。配列内のプロパティを走査し、その小文字形式をそれ自体にマップし、propFix に入れます特殊効果の速度 jQuery の一部のアニメーションでは、直接次のことができることがわかっています。通常、高速、低速を使用してください。 実装速度を定義するには、ソースコードで次のように定義します
jQuery.fx.speeds = { slow: 600, fast: 200, // Default speed _default: 400 };
var isIE //... jQuery.fx.speeds._default = isIE ? 800 : 400 jQuery.fx.speeds.veryfast = 200; $('...').fadeIn('veryfast')
jQuery.ready.promise = function( obj ) { //...省略若干 } else if ( document.addEventListener ) { // 使用addEventListener "DOMContentLoaded" 监听ready事件 document.addEventListener( "DOMContentLoaded", completed, false ); // 备选方案 "load" window.addEventListener( "load", completed, false ); //如果IE } else { // Ensure firing before onload, maybe late but safe also for iframes //IE下 attachEvent 的"onreadystatechange" document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work //备选方案onload window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch(e) {} if ( top && top.doScroll ) { (function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left"); } catch(e) { return setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } })(); } } } return readyList.promise( obj );}; .ready 利用了下面的.promise去做确保载入完成的工作,重点是document.addEventListener( "DOMContentLoaded", completed, false );window.addEventListener( "load", completed, false );document.attachEvent( "onreadystatechange", completed );window.attachEvent( "onload", completed );
4 つのチェック方法 上から始めると、IE で dom ノードがスクロールがあるかどうかを判断します。スクロールしないと準備完了に影響が出ます。簡単に言うと、jQuery は Diego Perini と呼ばれる技術を使用しています。コメント内のアドレスで詳細を確認できます。 Selector
$('#id').find('tag.thing') --- 高速
$('#id tag.thing') ------- sizzle を使用します
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 ); }
// Initialize a jQuery object init = jQuery.fn.init = function( selector, context ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) //超级省略...下略 // Handle HTML strings // HANDLE: $(html) -> $(array) // HANDLE: $(html, props) // HANDLE: $(#id) // HANDLE: $(expr, $(...)) // HANDLE: $(expr, context) // HANDLE: $(DOMElement) // HANDLE: $(function) return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn;
上記で抽出したコード コメントから、HTML タグ名と ID の取得を含め、JQ 独自のコンストラクターでどのような状況が処理されるかがわかります。つまり、これら 2 つの取得は最低レベルです。さらに、$() の他の処理は他の関数を経由する必要があるため、上記の処理ほど効率的ではありません。 同時に、init のプロトタイプが jQuery.fn に割り当てられていることもわかります。興味のある方は、jQuery オブジェクトについて詳しく学ぶことができます。
jQ のステータス セレクター (:not、:has、:eq など) は
以上がjQuery について知っておくべきことは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









jQuery 参照方法の詳細説明: クイック スタート ガイド jQuery は、Web サイト開発で広く使用されている人気のある JavaScript ライブラリであり、JavaScript プログラミングを簡素化し、開発者に豊富な機能を提供します。この記事では、jQuery の参照方法を詳しく紹介し、読者がすぐに使い始めるのに役立つ具体的なコード例を示します。 jQuery の導入 まず、HTML ファイルに jQuery ライブラリを導入する必要があります。 CDN リンクを通じて導入することも、ダウンロードすることもできます

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

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

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

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

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

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

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