web-dev-qa-db-ja.com

jQuery 1.8+など、大文字と小文字を区別しないjQueryを作成するにはどうすればよいですか?

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

大文字小文字を区別しないjQuery:contains selector?

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

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");
    }
  });

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

91
Matrym

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

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

JQuery 1.8では、このためのAPIが変更され、このjQuery 1.8+バージョンは次のようになります。

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

ここでテストできます 。 1.8以上のカスタムセレクターの詳細については、 こちらのSizzle wikiをご覧ください

127
Nick Craver

答えは正しいですが、: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; 
};

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

43
Ellipsis

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

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

そして去る :contains一人で...

[〜#〜] demo [〜#〜]

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

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

27
Mina Gabriel

遅れるかもしれませんが...

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

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

このように、あなたはDO NOT jQueryのNATIVE '。contains'を改ざんします...後でデフォルトのものが必要になるかもしれません。 ..改ざんされた場合、stackOverFlow ...

5
ErickBest

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

$.expr[":"].containsNoCase = function (el, i, m) { 
    var search = m[3]; 
    if (!search) return false; 
    return eval("/" + search + "/i").test($(el).text()); 
}; 
0
bresleveloper

私は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-accordingly

0
Umesh Patil