ホームページ  >  記事  >  ウェブフロントエンド  >  jQueryセレクターのソースコード解釈(7):elementMatcher function_jquery

jQueryセレクターのソースコード解釈(7):elementMatcher function_jquery

WBOY
WBOYオリジナル
2016-05-16 16:06:571074ブラウズ

Sizzle のコンパイル実行プロセスを理解するには、まず、関連する各サブルーチンの関数と主要な変数と関数を理解する必要があります。jQuery-1.10.2 バージョンのコンパイル コードを 1 つずつ説明します。助けてください。

elementMatcher(マッチャー)

1. ソースコード

コードをコピーします コードは次のとおりです:

関数 elementMatcher(matchers) {
return matchers.length > 1 ? function(elem, context, xml) {
var i = matchers.length;
while (i--) {
if (!matchers[i](elem, context, xml)) {
false を返します;
}
}
true を返します;
} : matchers[0];
}

2. 機能

この関数は、受信した要素が一致する実行関数配列マッチャーに一致するかどうかを判断する関数を返します。一致しない場合は false を返し、一致しない場合は true を返します。

マッチャーが要素を 1 つだけ持つ場合は要素自体を返し、それ以外の場合は新しい関数 (コード内の function(elem, context, xml) 関数) を返します。

return 関数の効果は context.filter(selectors) に似ています。もちろん、結果は true または false のみを返し、jQuery オブジェクトは返しません。

3. パラメータ
matchers - 配列。各要素は非疑似クラスのマッチャー実行関数です。例: 実際の実行プロセス div.map span:lt(10) では、div と map の一致する実行関数がマッチャーの 2 つの要素として elementMatcher 関数に渡され、span ノードの親ノードかどうかをフィルタリングします。要件を満たしています。

4. 戻り関数

4.1 マッチャーに複数の要素がある場合、次の関数が返されます:

コードをコピー コードは次のとおりです:

関数(要素、コンテキスト、xml) {
var i = matchers.length;
while (i--) {
if (!matchers[i](elem, context, xml)) {
false を返します;
}
}
true を返します;
}

4.1.1 機能
マッチャーは最後の要素から最初の要素まで順番に呼び出され、受信要素ノードが要件を満たしているかどうかを照合します。すべてが満たされている場合は true が返され、そうでない場合は false が返されます。

4.1.2 パラメータ

elem - チェックされる単一のノード要素。

context - セレクター文字列全体のマッチングを実行するコンテキスト ノード。ほとんどの場合、役に立ちません。

xml——現在の検索オブジェクトは HTML ドキュメントですか?それとも XML ドキュメントですか? HTML の場合、xml パラメータは false です。

4.2 マッチャーに要素が 1 つしかない場合は、要素自体を返します。
4.2.1 関数
受信した要素がセレクターと一致するかどうかを確認し、一致する場合は true を返し、一致しない場合は false を返します。

4.2.2 パラメータ
4.1.2 パラメータの説明と同じ。

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