如何让jQuery Contains不区分大小写,包括jQuery 1.8+?

我试图使用“包含”不区分大小写。 我尝试使用下面的计算器问题的解决scheme,但它没有奏效:

是否有不区分大小写的jQuery:包含select器?

为了方便,解决scheme在这里被复制:

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

我使用原来的大小写敏感的“包含”在相同的情况下没有任何错误。 有没有人有任何想法? 我会很感激。

这是我在当前项目中使用的,没有任何问题。 看看你是否有这个格式更好的运气:

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

你可以在这里testing一下 。 有关1.8+自定义select器的更多详细信息, 请查看这里的Sizzle wiki 。

值得注意的是,答案是正确的,但只包括:Contains而不是别名:contains可能导致意外行为的devise(或者可能被devise用于需要敏感和不敏感search的高级应用程序)。

这可以通过复制别名的扩展来解决:

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

花了我一段时间来弄清楚为什么它不适合我。

我会做这样的事情

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

和离开:contains单独…

DEMO

那么为什么jQuery不支持它的库? 如果这是容易的…

因为你的代码是否通过了火鸡代码?

可能会迟到…但是,

我更喜欢这样

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

这样,你不会篡改jQuery的NATIVE'.contains' …你可能需要默认的一个以后…如果篡改,你可能会发现自己回到stackOverFlow

我会让我自己添加我的朋友:

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

我只是能够完全忽略jQuery的case sensetivity来实现我想用下面的代码,

  $.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/

另外,如果你想使用:包含并做一些serch你可能想看看这个: http : //www.ultechspot.com/jquery/using-jquery-search-html-text-and-show-or-隐藏,因此