参考までに、 jQuery を使用したカスタム フィルター セレクターの作成に関する記事を参照してください。
序章:
jQuery のカスタム フィルター セレクターに慣れていない方のために、それらが何であるかについての簡単な入門書を次に示します。
再利用可能な が必要な場合はfilter
、オブジェクトに独自の関数を追加して、jQuery のセレクター式を拡張できjQuery.expr[':']
ます。
この関数は現在のコレクションの各要素に対して実行され、true または false を返す必要があります ( とよく似ていますfilter
)。この関数には、次の 3 ビットの情報が渡されます。
問題の要素
コレクション全体におけるこの要素のインデックス
match
より複雑な式の重要な情報を含む、正規表現の一致から返される配列。
を拡張したら、組み込みのもの ( 、など)をjQuery.expr[':']
使用するのと同じように、jQuery セレクターでフィルターとして使用できます。:first
:last
:eq()
以下は、複数のクラスが割り当てられている要素をフィルタリングする例です。
jQuery.expr[':'].hasMultipleClasses = function(elem, index, match) {
return elem.className.split(' ').length > 1;
};
$('div:hasMultipleClasses');
これがフィドルです:http://jsfiddle.net/acTeJ/
上記の例ではmatch
、関数に渡される配列を使用していません。もっと複雑な例を試してみましょう。ここでは、tabindex
指定した数値よりも大きい要素に一致するフィルターを作成します。
jQuery.expr[':'].tabindexAbove = function(elem, index, match) {
return +elem.getAttribute('tabindex') > match[3];
};
$('input:tabindexAbove(4)');
これがフィドルです:http://jsfiddle.net/YCsCm/
これが機能する理由は、match
配列が、セレクターの解析に使用された正規表現から返された実際の配列であるためです。したがって、この例でmatch
は、次の配列になります。
[":tabIndexAbove(4)", "tabIndexAbove", "", "4"]
ご覧のとおり、 を使用して括弧内の値を取得できますmatch[3]
。
質問:
jQuery 1.8 では、match
配列はフィルター関数に渡されなくなりました。渡された情報にアクセスできないため、tabindexAbove
フィルターは機能しなくなります(このフィドルと上記のフィドルの唯一の違いは、これが新しいバージョンの jQuery を使用することです)。
そこで、明確にしたいいくつかの点を以下に示します。
これは予想される動作ですか?それはどこかに文書化されていますか?
Sizzle
これは、更新されたという事実と関係がありますか(「Sizzle の古い API は、このリライトでは変更されていません」と明確に記載されていますが、おそらくこれは、「不要になったの削除」という意味ですSizzle.filter
) 。 ?配列にアクセスできなくなった
match
ので、フィルターに渡される情報にアクセスする他の方法はありますか (この場合は4
)。
jQuery Docs でカスタム フィルター セレクターに関するドキュメントを見つけたことがないため、これに関する情報をどこから探し始めればよいかわかりません。