我正在尝试使用“包含”不区分大小写。我尝试在下面的stackoverflow问题中使用该解决方案,但它不起作用:
Is there a case insensitive 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");
}
});
我在同一场景中使用原始区分大小写的“包含”,没有任何错误。有没有人有任何想法?我很感激。
答案 0 :(得分:127)
这是我在当前项目中使用的,没有任何问题。看看你对这种格式有好运:
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;
};
});
You can test it out here。有关1.8 +自定义选择器的更多详细信息,请check out the Sizzle wiki here。
答案 1 :(得分: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;
};
我花了一些时间来弄清楚它为什么不适合我。
答案 2 :(得分:27)
我会做这样的事情
$.expr[':'].containsIgnoreCase = function (n, i, m) {
return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
离开:contains
独自......
那么为什么jQuery不能在它的库中支持它?!如果这很容易......
答案 3 :(得分:5)
可能会迟到......但是,
我更喜欢这样..
$.extend($.expr[":"], {
"MyCaseInsensitiveContains": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
这样,你不要篡改jQuery的NATIVE '。包含' ......稍后您可能需要默认的...如果被篡改,您可能会找回 stackOverFlow ...
答案 4 :(得分:0)
我允许自己添加我的朋友:
$.expr[":"].containsNoCase = function (el, i, m) {
var search = m[3];
if (!search) return false;
return eval("/" + search + "/i").test($(el).text());
};
答案 5 :(得分: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/
此外,如果您想使用:包含并进行一些搜索,您可能需要查看此内容:http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide-accordingly