jQueryのfilterを拡張する方法

filterに任意のメソッドを拡張する方法

.filter() – jQuery API

Quick Tip: Dissecting jQuery – Filters を参考に、jQueryのfilterを拡張します。簡単です。

拡張コード

// 書き方1
jQuery.expr.filters.isFloatUnit = function( elem ) {
    return elem.className.match(/(image|map|youtube|eximage)-(left|right)/);
}

// 書き方2
$.extend(
    jQuery.expr[':'], {
        isFloatUnit: function( elem ) {
            return elem.className.match(/(image|map|youtube|eximage)-(left|right)/);
        }
    }
);

どちらの書き方でも拡張できます。上のサンプルは、単に要素のクラスが正規表現マッチするかどうかだけのメソッド。製品内のローカルな規則に基づいたfilterを実装できると、ちょっと便利な場面もあったりなかったり。

利用コード

// 使い方1
$(elem).children().filter(':isFloatUnit');

// 使い方2
$('div:isFloatUnit');

: ( jQuery.expr[':'] ) は、filter ( jQuery.expr.filters ) のエイリアス扱い。実装したら、あとは勝手の良い方法でフィルターを利用します。