1

私はjQueryIsotopeで遊んでいて要素検索を実装したいと思っています。ユーザーがテキストボックスに入力すると、次のようにフィルターオプションを変更します。

var newFilter = '[data-myAttr*="' + $('#mySearchBox').val() + '"]';
$('#myIsotopeContainer').isotope({filter: newFilter});

jQueryの属性にselectorが含まれていますただし、大文字と小文字が区別されるため、大文字と小文字を区別したいと思います。どうすればこれを達成できますか?

を使用することを提案する他の質問とGoogleの結果を見てきましたが.filter(fn)、同位体ではそれほど制御できません。私はそれにセレクターを与えるだけです。

4

3 に答える 3

3

Isotopeのソースを見ると、次のような関数を渡すことができるはずです。

$('#myIsotopeContainer').isotope({ filter: function() {
        // case-insensitive pattern match:
        var pattern=new RegExp($('#mySearchBox').val(),'i');

        // test against 'data-myAttr':
        return pattern.test(this.attr('data-myAttr'));
    }
});

Isotopeは、.filter()独自のフィルタリングを実行するための呼び出しを行うだけです。試してみて、何が起こるか見てみましょう。

于 2012-02-29T01:57:26.140 に答える
1

すべての属性のプロトコルとして小文字を使用してから、ユーザー入力を小文字に変更します

于 2012-02-29T03:39:38.610 に答える
0

私のように少し違ったやり方をしている人たちのために、この質問に関連する答えを出したいと思います。属性だけでなく、要素全体(または要素の子)のテキストを検索したかったのです。:containsセレクターを使用していて、大文字と小文字を区別しないようにする場合は、このバグレポートで概説されているようにJQueryを拡張する必要があります。便宜上、以下のコードを投稿します。

$.extend($.expr[':'], {
  'containsi': function(elem, i, match, array)
  {
    return (elem.textContent || elem.innerText || '').toLowerCase()
    .indexOf((match[3] || "").toLowerCase()) >= 0;
  }
});

これで、:contains('SomeString')を使用する場合と同じようにJQueryを使用できますが、新しい拡張:containsi('SomeString')を使用するようになります。

于 2012-04-19T13:48:16.747 に答える