3

私が見つけたいくつかの異なるチュートリアルに基づいて、現在v1.8.0を使用しているjQueryにカスタム疑似セレクターを追加しようとしています。私は基本的に、大文字と小文字を区別しない :contains セレクターを実装しようとしています。

私の現在の化身はこのように見えます

$.expr[':'].icontains = function(obj, index, meta, stack){
     return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
};

この投稿から来ました。セレクターが正しく初期化されているようですが、jQuery が関数を呼び出すと、obj パラメーターのみが定義されます。残りの 3 つの引数は未定義です。

引数をコンソールに記録すると、2 つの項目の配列が表示されます。最初の項目は :icontains 呼び出しの前にセレクターによって返された DOM オブジェクトであり、2 番目の項目は未定義です。

なぜこれが起こるのか、誰かが考えを持っていますか?

4

1 に答える 1

5

彼らは1.8でSizzleの書き直しをしました。現在、疑似を定義する方法は次のとおりです:http: //jsfiddle.net/bazWj/

$.expr.pseudos.icontains = $.expr.createPseudo(function(arg) {
    return function(elem) {
         return (elem.textContent
                  || elem.innerText
                  || jQuery(elem).text()
                  || '')
        .toLowerCase()
        .indexOf(arg.toLowerCase()) >= 0;

    };
});
于 2012-08-23T20:26:50.847 に答える