ホームページ ウェブフロントエンド jsチュートリアル jQueryソースコード解析-04セレクター-Sizzle-動作原理解析_jquery

jQueryソースコード解析-04セレクター-Sizzle-動作原理解析_jquery

May 16, 2016 pm 05:59 PM
動作原理

著者: nuysoft/Gao Yun QQ: 47214707 メール: nuysoft@gmail.com
声明: この記事はオリジナルの記事です。転載する必要がある場合は、出典を明記し、元のリンクを保持してください。
Sizzle ソース コードを分析する前に、セレクターの動作原理を整理しましょう。

最初に、後で読むときに曖昧さがないよう、セレクターで使用されるいくつかの名詞を明確にします。 >セレクター式: "div > p"
ブロック式: "div" "p"
列セレクター式: "div, p"
ブロック スプリッター: Sizzle の通常のチャンカー、選択用 式は分割されています
ファインダー: ブロック式を検索し、見つかった DOM 要素の配列を候補セットと呼びます。
フィルター: ブロック式と候補セットをフィルターします。
関係フィルターは、ブロック式と候補セットの間の関係をフィルターします。ブロック式には合計 4 つの関係があります: " " 直接の兄弟関係、"" 先祖関係、および "~" の後のすべての兄弟関係。ファインダー、フィルターによってフィルター処理されます
マップ セット: 候補セットのコピー、マップ セットをフィルターするためのフィルターおよびリレーショナル フィルター

ワークフロー:

1 ブロック スプリッターを使用します。セレクター式を左から右に分割します
カンマ「,」で分割された並列セレクター式が見つかった場合は、最初のカンマの前の選択部分のみに分割します コンバーター式 1、残りの部分を記録します

2. Sizzle.find で最後のブロック式を検索し、結果を候補セットに入れ、ブロック式内の一致する文字列部分を削除します
ファインダー Sizzle.find は、正規セット Expr から対応する正規表現を取得します。 match し、ブロック式と一致します。一致が成功した場合、検索関数セット Expr.find から対応する検索関数を取得して実行します。
検索順序は Expr.order で定義されます。順序は次のとおりです。 NAME TAG。CLASS を検索する場合、ブラウザは getElementsByClassName をサポートする必要があります。
Expr.match は ID の正規一致表現を設定します。 CLASS NAME ATTR TAG CHILD POS PSEUDO

3. 最後のブロック式が空でない場合(文字列)、フィルター Sizzle.filter はセットをフィルター処理します
フィルター Sizzle.filter は単一のブロック式および候補セット内の要素に対してのみ機能します 候補セット内の要素が残りの条件を満たすことを確認して機能しますブロック式
フィルタ Sizzle.filter のフィルタリング処理中に、条件を満たさないものは false に設定され、条件を満たすものはフィルタリング時に変更されません
正規表現から対応する正規表現を取得しますExpr.leftMatch を設定し、ブロック式と一致します。一致が成功した場合は、Expr.filter から対応するフィルター関数を取得して実行します。
Expr.leftMatch は、Expr.match と同じ数の正規表現を定義します。 式: ID クラス名ATTR TAG CHILD POS PSEUDO
フィルター関数セット Expr.filter は PSEUDO CHILD ID TAG CLASS ATTR POS
Filter のフィルター関数を定義します Sizzle.filter はフィルター処理の前にプレフィルター Expr を呼び出します .preFilter はフィルター処理に必要なパラメーターを修正します, ただし、CLASSは例外です
CLASSが事前フィルタリングされた場合、クラスに一致する要素を直接候補セットとして返すように最適化され、フィルタリング範囲と候補セット範囲が狭められます
上記で取得した候補セットセットをコピーします以降のフィルタリング操作は checkSet
に対して実行されます。最後のブロック式の検索とフィルタリングはここで終了し、候補セット セットとマッピング セット checkSet
4. マッピング セット checkSet の残りのブロック式を右から左にフィルターし、前のブロック式との関係に基づいて関係フィルター セット Expr.relative から対応する関数を取得します。
関係フィルタ Expr.relative のフィルタリング処理において、条件を満たさないものは false に設定され、条件を満たしているものは親要素、祖先要素、兄弟要素の関係に設定されます
4 つのタイプがあります: " " 直接の兄弟関係; " 父と息子の関係 "" 先祖関係; "~" の後のすべての兄弟関係。式がタグ TAG である場合、タグ タイプ nodeName を直接比較して等しいかどうかを確認します。
タグ TAG ではない場合、フィルター Sizzle.filter が呼び出されてフィルターされます。フィルタリング プロセスについては、ステップ 3 を参照してください。
> 右からすべてのブロック式がフィルターされるまで左をフィルターします

5. フィルターされたマッピング セット checkSet に従って、マッピング セット checkSet
が null の場合、最終結果セットを選択します。 、 false、フィルタリングされます
要素 (nodeType===1) ではない場合、フィルタリングされます
コンテキストがドキュメントではなく要素であり、要素の子要素ではない場合、フィルタリングされますfiltered

6. 並列式がある場合は 1 ~ 5 を繰り返し、最終的な結果セットをマージ、ソート、重複排除します
セレクター式が 1 つだけで並列セレクター式がない場合はソートなしは必須です

以下の処理はSizzleに属しませんが、SizzleのjQuery拡張に属します

7。複数のコンテキストがある場合は、コンテキストごとに1〜6を繰り返します
複数のコンテキスト例: $(' div').find('div > p')、$('div') は複数の div を見つけることができます
実際、ステップ 7 は jQuery セレクターへの入り口です ステップ 7 から 1 を呼び出します。 ~6、空の jQuery オブジェクトを結果セットとして渡すとき
デフォルトでは、ドキュメントはコンテキストです: (context || rootjQuery).find( selector )

8. 結果をマージして削除します。複数のコンテキストから見つかったセットを繰り返し、結果セットを返します

完了!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

SOLコインとは何ですか? SOLコインはどのように機能しますか? SOLコインとは何ですか? SOLコインはどのように機能しますか? Mar 16, 2024 am 10:37 AM

Solana ブロックチェーンと SOL トークン Solana は、分散型アプリケーション (dApps) に高いパフォーマンス、セキュリティ、スケーラビリティを提供することに重点を置いたブロックチェーン プラットフォームです。 Solana ブロックチェーンのネイティブ資産として、SOL トークンは主に取引手数料の支払い、誓約、ガバナンスの決定への参加に使用されます。 Solana のユニークな特徴は、トランザクション確認時間の短縮とスループットの高さであり、開発者とユーザーの間で好まれています。 SOL トークンを通じて、ユーザーは Solana エコシステムのさまざまなアクティビティに参加し、プラットフォームの開発と進歩を共同で促進できます。 Solana の仕組み Solana は、数千のトランザクションを効率的に処理できる履歴証明 (PoH) と呼ばれる革新的なコンセンサス メカニズムを使用します。

Spring Data JPA のアーキテクチャと動作原理は何ですか? Spring Data JPA のアーキテクチャと動作原理は何ですか? Apr 17, 2024 pm 02:48 PM

SpringDataJPA は JPA アーキテクチャに基づいており、マッピング、ORM、トランザクション管理を通じてデータベースと対話します。そのリポジトリは CRUD 操作を提供し、派生クエリによりデータベース アクセスが簡素化されます。さらに、遅延読み込みを使用して必要な場合にのみデータを取得するため、パフォーマンスが向上します。

VETコインとは何ですか? VETコインはどのように機能しますか? VETコインとは何ですか? VETコインはどのように機能しますか? Mar 16, 2024 am 11:40 AM

VET Coin: ブロックチェーンベースの IoT エコシステム VeChainThor (VET) は、データの信頼性を確保し、価値の安全な転送を可能にすることで、モノのインターネット (IoT) 分野を強化することを目的としたブロックチェーン技術に基づくプラットフォームです。 。 VET コインは VeChainThor ブロックチェーンのネイティブ トークンであり、次の機能があります: 取引手数料の支払い: VET コインは、データ ストレージ、スマート コントラクトの実行、本人確認など、VeChainThor ネットワーク上での取引手数料の支払いに使用されます。ガバナンス: VET トークン所有者は、プラットフォームのアップグレードや提案への投票など、VeChainThor のガバナンスに参加できます。インセンティブ: VET コインは、ネットワーク内のバリデーターにインセンティブを与えて、

SHIBコインとは何ですか? SHIBコインはどのように機能しますか? SHIBコインとは何ですか? SHIBコインはどのように機能しますか? Mar 17, 2024 am 08:49 AM

ShibaInu Coin: 犬にインスピレーションを得た暗号通貨 ShibaInu Coin (SHIB) は、象徴的な柴犬の絵文字にインスピレーションを得た分散型暗号通貨です。この暗号通貨は2020年8月に発売され、イーサリアムネットワーク上でドージコインの代替となることを目指しています。動作原理 SHIB コインは、イーサリアム ブロックチェーン上に構築されたデジタル通貨であり、ERC-20 トークン規格に準拠しています。これは、分散型コンセンサスメカニズムであるプルーフ・オブ・ステーク(PoS)を利用しており、これにより、保有者はSHIBトークンをステーキングしてトランザクションを検証し、それに対する報酬を得ることができます。主な特徴 大量の供給量: SHIB コインの初期供給量は 1,000 兆コインであり、流通している仮想通貨としては最大の 1 つとなります。低価格

ポリゴンコインとは何ですか?ポリゴンコインはどのように機能しますか? ポリゴンコインとは何ですか?ポリゴンコインはどのように機能しますか? Mar 16, 2024 am 09:22 AM

Polygon: イーサリアムエコシステムを構築する多機能ブロックチェーン Polygon は、以前は MaticNetwork として知られていたイーサリアム上に構築された多機能ブロックチェーン プラットフォームです。その目標は、イーサリアム ネットワークにおけるスケーラビリティ、高額な料金、複雑さの問題を解決することです。 Polygon は、スケーラビリティ ソリューションを提供することで、開発者とユーザーに、より高速、より安価、よりシンプルなブロックチェーン エクスペリエンスを提供します。 Polygon の仕組みは次のとおりです: サイドチェーン ネットワーク: Polygon は複数のサイドチェーンのネットワークを作成します。これらのサイドチェーンはメインのイーサリアム チェーンと並行して実行され、大量のトランザクションを処理できるため、ネットワーク全体のスループットが向上します。 Plasma フレームワーク: Polygon は Plasma フレームワークを利用しています。

アルゴランドコインとは何ですか?アルゴランドコインはどのように機能しますか? アルゴランドコインとは何ですか?アルゴランドコインはどのように機能しますか? Mar 17, 2024 am 08:30 AM

Algorand: 純粋な Byzantine コンセンサス プロトコルに基づいたブロックチェーン プラットフォーム Algorand は、純粋な Byzantine コンセンサス プロトコルに基づいて構築されたブロックチェーン プラットフォームであり、効率的で安全かつスケーラブルなブロックチェーン ソリューションを提供することを目的としています。このプラットフォームは、MIT 教授のシルビオ・ミカリによって 2017 年に設立されました。動作原理 アルゴランドの中核は、独自の純粋なビザンチン コンセンサス プロトコルであるアルゴランド コンセンサスにあります。このプロトコルを使用すると、ネットワーク内に悪意のあるノードが存在する場合でも、ノードはトラストレス環境でコンセンサスを達成できます。アルゴランドのコンセンサスは、一連の手順を通じてこの目標を達成します。キーの生成: 各ノードは公開キーと秘密キーのペアを生成します。提案フェーズ: ランダムに選択されたノードが新しいゾーンを提案します

ARコインとは何ですか? ARコインはどのように機能しますか? ARコインとは何ですか? ARコインはどのように機能しますか? Mar 15, 2024 pm 07:25 PM

AR コイン: 拡張現実技術に基づくデジタル通貨 AR コインは、拡張現実技術を使用してユーザーにデジタル コンテンツとの対話体験を提供し、現実世界で没入型の体験を作成できるようにするデジタル通貨です。仕組み AR Coin は、次の重要な概念に基づいて機能します。 拡張現実 (AR): AR テクノロジーは現実世界にデジタル情報を重ね合わせ、ユーザーが仮想オブジェクトと対話できるようにします。ブロックチェーン: ブロックチェーンは、トランザクションの記録と検証に使用される分散型台帳テクノロジーです。 AR コインにセキュリティと透明性を提供します。スマート コントラクト: スマート コントラクトは、特定の操作を自動化するために使用されるブロックチェーンに保存されるコードです。これらは AR コインの作成と管理において重要な役割を果たします。 ARコインのワークフローは以下の通りです。 ARボディの作成

ビームコインとは何ですか?ビームコインはどのように機能しますか? ビームコインとは何ですか?ビームコインはどのように機能しますか? Mar 15, 2024 pm 09:50 PM

Beam Coin: プライバシーを重視した暗号通貨 Beam Coin は、安全で匿名のトランザクションを提供するように設計されたプライバシーを重視した暗号通貨です。これは、トランザクションをマージし、送信者と受信者のアドレスを隠すことでユーザーのプライバシーを強化するブロックチェーン技術である MimbleWimble プロトコルを使用します。 Beam Coin の設計コンセプトは、取引情報の機密性を保証するデジタル通貨のオプションをユーザーに提供することです。このプロトコルを採用することで、ユーザーは個人情報の漏洩を心配することなく、より安心して取引を行うことができます。このプライバシー保護機能により、Beam Coin が機能します。MimbleWimble プロトコルは、以下によってプライバシーを強化します。 トランザクションのマージ: 複数のトランザクションを結合します。

See all articles