是否有一个不区分大小写的jQuery:包含选择器?

Pat*_*Pat 140 javascript jquery jquery-selectors

是否有一个不区分大小写的版本:包含 jQuery选择器,还是应该通过循环遍历所有元素并将它们的.text()与我的字符串进行比较来手动完成工作?

Pat*_*Pat 120

我最终为jQuery 1.2做的是:

jQuery.extend(
    jQuery.expr[':'], { 
        Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
});
Run Code Online (Sandbox Code Playgroud)

这将扩展jquery以包含:包含不区分大小写的选择器,:contains选择器保持不变.

编辑:对于jQuery 1.3(感谢@ user95227),稍后您需要

jQuery.expr[':'].Contains = function(a,i,m){
     return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Run Code Online (Sandbox Code Playgroud)

编辑:显然通过使用直接访问DOM

(a.textContent || a.innerText || "") 
Run Code Online (Sandbox Code Playgroud)

代替

jQuery(a).text()
Run Code Online (Sandbox Code Playgroud)

在前面的表达式中,它会大大加快速度,因此如果速度有问题,请自担风险.(见@John问题)

最新编辑:对于jQuery 1.8应该是:

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function( elem ) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});
Run Code Online (Sandbox Code Playgroud)


mon*_*ike 102

使其可选择不区分大小写:http: //bugs.jquery.com/ticket/278

$.extend($.expr[':'], {
  'containsi': function(elem, i, match, array)
  {
    return (elem.textContent || elem.innerText || '').toLowerCase()
    .indexOf((match[3] || "").toLowerCase()) >= 0;
  }
});
Run Code Online (Sandbox Code Playgroud)

然后用:containsi而不是:contains

  • 这应该添加到标准的jquery库中 (20认同)
  • 添加一个新功能最好覆盖我,我现在使用这个选项(像魅力一样工作) (3认同)

小智 40

从jQuery 1.3开始,不推荐使用此方法.要使其工作,需要将其定义为函数:

jQuery.expr[':'].Contains = function(a,i,m){
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Run Code Online (Sandbox Code Playgroud)


Ale*_*yev 38

如果有人(像我一样)感兴趣,那么am [3]包含定义中意味着什么.


KEY/LEGEND:jQuery提供的参数用于选择器定义:

r =正在仔细检查的jQuery元素数组.(例如:r.length =元素数量)

i =当前正在审查中的元素索引,在数组r中.

a =目前正在审查中的元素.Selector语句必须返回true才能将其包含在匹配的结果中.

m [2] =我们正在寻找的nodeName或*(冒号左侧).

m [3] = param传递给:selector(param).通常是索引号,如:nth-​​of-type(5)或字符串,如:color(blue).


sea*_*lJS 31

在jQuery 1.8中,您将需要使用

jQuery.expr[":"].icontains = jQuery.expr.createPseudo(function (arg) {                                                                                                                                                                
    return function (elem) {                                                            
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;        
    };                                                                                  
});
Run Code Online (Sandbox Code Playgroud)

  • thanx更新.刚刚更新到JQuery 1.8,它就停止了工作 (3认同)
  • 工作完美,谢谢!刚刚更新到1.8,这停止了工作。 (2认同)

Bro*_*ams 15

似乎执行速度稍快且允许正则表达式的变体是:

jQuery.extend (
    jQuery.expr[':'].containsCI = function (a, i, m) {
        //-- faster than jQuery(a).text()
        var sText   = (a.textContent || a.innerText || "");     
        var zRegExp = new RegExp (m[3], 'i');
        return zRegExp.test (sText);
    }
);
Run Code Online (Sandbox Code Playgroud)



这不仅不区分大小写,而且允许强大的搜索,例如:

  • $("p:containsCI('\\bup\\b')") (匹配"向上"或"向上",但不是"上","唤醒"等)
  • $("p:containsCI('(?:Red|Blue) state')") (匹配"红色状态"或"蓝色状态",但不匹配"向上状态"等)
  • $("p:containsCI('^\\s*Stocks?')") (匹配"股票"或"股票",但仅在段落的开头(忽略任何前导空格).)


Eri*_*est 11

可能会迟到......但是,

我宁愿这样走..

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

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


小智 6

jQuery.expr[':'].contains = function(a,i,m){
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Run Code Online (Sandbox Code Playgroud)

更新代码在1.3中工作得很好,但与前一个示例不同,"contains"在第一个字母上应该是小写的.


Ume*_*til 5

请参阅下文,使用“:contains”从 HTML 代码中查找忽略大小写的文本,

 $.expr[":"].contains = $.expr.createPseudo(function(arg) {
            return function( elem ) {
                return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
            };
        });
        $("#searchTextBox").keypress(function() {
          if($("#searchTextBox").val().length > 0){
            $(".rows").css("display","none");
            var userSerarchField = $("#searchTextBox").val();
            $(".rows:contains('"+ userSerarchField +"')").css("display","block");
          } else {
            $(".rows").css("display","block");
          }              
        });
Run Code Online (Sandbox Code Playgroud)

您还可以使用此链接根据您的 jquery 版本查找忽略大小写的代码, Make jQuery :contains Case-Insensitive