著者: 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. 結果をマージして削除します。複数のコンテキストから見つかったセットを繰り返し、結果セットを返します
完了!

Microsoft Teams 上的对讲机是什么?顾名思义,新的 Walkie Talkie 功能让 Microsoft Teams 上的用户可以通过使用他们的声音与他们的团队成员进行实时交流,从而与他们联系。在频道中连接到 Walkie Talkie 的用户可以一次听一个即按即说格式的对方讲话。这样一来,只有一个人在说话的时候才能引起注意,而不会被其他人打断。微软将这一功能定

听诊器的工作原理是通过声学传感器将人体内部的声音转化成电信号,然后通过耳机或扩音器放大和传输这些信号给医生,它的工作原理基于声学原理,能够帮助医生听到内部声音并进行疾病诊断。听诊器的核心部件是声学传感器,通常由一个共振膜和一个接收器组成,共振膜是一个薄膜,通常由金属或塑料制成,它能够感受到人体内部的声音振动,当共振膜受到声波的作用时,它会产生微小的振动。

Vue.js是一个流行的前端框架,提供了一些方便的功能来优化性能和提升开发效率。其中一个功能是keep-alive,它可以帮助我们在组件之间保留状态,从而减少不必要的渲染和请求。本文将详细介绍keep-alive的工作原理以及使用方法,并提供一些代码示例。一、keep-alive的工作原理在Vue.js中,每当我们切换组件时,组件都会被重新创建

深入剖析Spring框架的架构与工作原理引言:Spring是Java生态系统中最受欢迎的开源框架之一,它不仅提供了一套强大的容器管理和依赖注入功能,还提供了许多其他功能,如事务管理、AOP、数据访问等。本文将深入剖析Spring框架的架构与工作原理,并通过具体的代码示例来解释相关概念。一、Spring框架的核心概念1.1IoC(控制反转)Spring的核心

计算机按工作原理可分为数字计算机和模拟计算机。数字式电子计算机是当今世界电子计算机行业中的主流,其内部处理的是一种称为符号信号或数字信号的电信号,它有着运算速度快、运算精度高、通用性强等特点。模拟计算机是根据相似原理,用一种连续变化的模拟量作为被运算的对象的计算机;模拟计算机以电子线路构成基本运算部件。

探究Spring拦截器的工作原理及优势引言:Spring框架是Java开发中最常用的框架之一,它提供了丰富的功能和灵活性,使得开发者能够更加高效地开发应用程序。其中一个重要的组件就是拦截器(Interceptor)。本文将深入探讨Spring拦截器的工作原理和优势,同时给出具体的代码示例。一、Spring拦截器的工作原理Spring拦截器使用了面向切面编程(

交换机的工作原理包括:1、数据帧接收和解析;2、转发表的更新;3、数据帧的转发;4、泛洪处理;5、维护连接。详细介绍:1、数据帧接收和解析,当交换机接收到一个数据帧时,它会首先对数据帧进行解析,提取出其中的源MAC地址和目的MAC地址等信息;2、转发表的更新,交换机内部维护着一个转发表,这个表记录了MAC地址与接口的对应关系;3、数据帧的转发等等。

了解PHP中散列查找算法的工作原理及实际应用场景概述:散列查找算法是一种常用的数据结构和算法,在PHP编程中也有着广泛的应用。它通过将关键字映射为数据结构中的索引位置来实现快速的查找操作。本文将介绍散列查找算法的工作原理和实际应用场景,并给出具体的代码示例。一、散列查找算法的工作原理散列查找算法的基本思想是通过一个散列函数将关键字映射到数据结构中的索引位置,


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック



