如何让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-隐藏,因此