如何使jQuery Contains不区分大小写,包括jQuery 1.8+?
我试图使用"包含" 案件不敏感。 我尝试在下面的stackoverflow问题中使用该解决方案,但它没有工作:
是否有一个不区分大小写的jQuery:包含选择器?
为方便起见,此处将复制解决方案:
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");
}
});
我使用原始区分大小写的#34;包含" 在同一场景中工作没有任何错误。 有没有人有任何想法? 我很感激。
6个解决方案
127 votes
这是我在当前项目中使用的,没有任何问题。 看看你是否有更好的运气这种格式:
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。
Nick Craver answered 2019-08-14T02:05:37Z
43 votes
值得注意的是,答案是正确的,但仅涵盖: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;
};
花了一些时间来弄清楚它为什么不适合我。
Ellipsis answered 2019-08-14T02:06:16Z
27 votes
我会做这样的事情
$.expr[':'].containsIgnoreCase = function (n, i, m) {
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
和离开:contains独自...
DEMO
那么为什么jQuery在它的库中不支持它呢?! 如果这很容易......
因为你的代码是否通过火鸡代码?
Mina Gabriel answered 2019-08-14T02:07:05Z
5 votes
可能会迟到......但是,
我宁愿这样走..
$.extend($.expr[":"], {
"MyCaseInsensitiveContains": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
这样,你不要篡改jQuery的NATIVE'.contains'......稍后你可能需要默认的...如果被篡改,你可能会发现自己回到stackOverFlow ......
ErickBest answered 2019-08-14T02:07:28Z
0 votes
我允许自己添加我的朋友:
$.expr[":"].containsNoCase = function (el, i, m) {
var search = m[3];
if (!search) return false;
return eval("/" + search + "/i").test($(el).text());
};
bresleveloper answered 2019-08-14T02:07:53Z
0 votes
我只是能够完全忽略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/]
此外,如果您想使用:包含并进行一些搜索,您可能需要查看此内容:[http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly]
Umesh Patil answered 2019-08-14T02:08:32Z