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

时间:2010-02-04 00:51:54

标签: jquery contains case-sensitive case-insensitive

我正在尝试使用“包含”不区分大小写。我尝试在下面的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");
    }
  });

我在同一场景中使用原始区分大小写的“包含”,没有任何错误。有没有人有任何想法?我很感激。

6 个答案:

答案 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独自......

DEMO

那么为什么jQuery不能在它的库中支持它?!如果这很容易......

因为Does your code pass the turkey code?

答案 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