93

「contains」の大文字小文字を区別せずに使用しようとしています。次のstackoverflowの質問でソリューションを使用しようとしましたが、機能しませんでした。

大文字と小文字を区別しないjQuery:containsセレクターはありますか?

便宜上、ソリューションはここにコピーされます。

jQuery.extend(
        jQuery.expr[':'], { 
                Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
});

エラーは次のとおりです。

Error: q is not a function
Source File: /js/jquery-1.4.js?ver=1.4
Line: 81

これが私がそれを使用しているところです:

  $('input.preset').keyup(function() {
    $(this).next().find("li").removeClass("bold");
    var theMatch = $(this).val();
    if (theMatch.length > 1){
      theMatch = "li:Contains('" + theMatch + "')";
      $(this).next().find(theMatch).addClass("bold");
    }
  });

同じシナリオで大文字と小文字を区別する元の「含む」を使用すると、エラーなしで機能します。誰かアイデアはありますか?私はそれを感謝します。

4

6 に答える 6

129

これは私が現在のプロジェクトで使用しているもので、問題はありません。この形式で運が良かったかどうかを確認してください。

jQuery.expr[':'].Contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};

jQuery 1.8では、このAPIが変更され、jQuery1.8以降のバージョンは次のようになります。

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function( elem ) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});

ここでテストできます。1.8以降のカスタムセレクターの詳細については、Sizzlewikiをここで確認してください

于 2010-02-04T00:59:10.723 に答える
43

答えは正しいが、カバーしているだけで、予期しない動作につながる可能性 :Containsのあるエイリアスはカバーしていないことに注意してください(または、機密性の高い検索と機密性の低い検索の両方を必要とする高度なアプリケーションの設計で使用できます)。:contains

これは、エイリアスの拡張子を複製することで解決できます。

jQuery.expr[':'].Contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};
jQuery.expr[':'].contains = function(a, i, m) { 
  return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; 
};

なぜそれがうまくいかなかったのかを理解するのにしばらく時間がかかりました。

于 2011-04-27T04:31:48.633 に答える
27

私はこのようなことをします

     $.expr[':'].containsIgnoreCase = function (n, i, m) {
        return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
    };

そして放っておい:containsて...

デモ

では、なぜjQueryはそのライブラリでそれをサポートしていないのですか?!簡単なら...

あなたのコードは七面鳥のコードを渡しますか

于 2013-02-22T21:56:46.620 に答える
6

遅れるかもしれませんが……でも、

私はこのように行きたいです。

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

このように、jQueryのNATIVE'.contains 'を改ざんしないでください...後でデフォルトのものが必要になる場合があります...改ざんされた場合、stackOverFlowに戻る可能性があります...

于 2013-05-27T16:16:17.730 に答える
0

友達を追加できるようにします。

$.expr[":"].containsNoCase = function (el, i, m) { 
    var search = m[3]; 
    if (!search) return false; 
    return eval("/" + search + "/i").test($(el).text()); 
}; 
于 2014-02-11T08:38:51.233 に答える
0

以下のコードを使用して、jQueryの大文字と小文字の区別を完全に無視して、目的を達成することができました。

            $.expr[":"].contains = $.expr.createPseudo(function(arg) {
            return function( elem ) {
                return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
            };
        });

このリンクを使用して、大文字と小文字の区別を無視するjQueryバージョンに基づくコードを見つけることができます 。https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/

また、:containsを使用して検索を行う場合は、次を参照してください:http: //technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide-によると

于 2016-01-11T11:02:21.083 に答える