是否有不区分大小写的 jQuery :contains 选择器?

IT技术 javascript jquery jquery-selectors
2021-01-09 16:19:31

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

6个回答

我最终为 jQuery 1.2 做的是:

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

这将扩展 jquery 以具有不区分大小写的 :Contains 选择器, :contains 选择器保持不变。

编辑:对于 jQuery 1.3(感谢@user95227)及更高版本,您需要

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

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

(a.textContent || a.innerText || "") 

代替

jQuery(a).text()

在前面的表达式中,它大大加快了速度,所以如果速度是一个问题,请自担风险。(见@John问题

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

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function( elem ) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});
这不适用于 jQuery 1.8。见seagullJS的回答下面的一个更新版本- stackoverflow.com/a/12113443/560114
2021-03-27 16:19:31
只是想让人们知道@Pat 和其他人为 jQuery 1.3 描述的解决方案也适用于 1.4.3。
2021-03-30 16:19:31
链接到@John 的问题/答案,因为这里的链接已被删除:stackoverflow.com/questions/1407434/...
2021-04-06 16:19:31

使其可选不区分大小写: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;
  }
});

然后使用:containsi代替:contains

添加一个新功能最好不要覆盖给我,我现在使用这个选项(就像一个魅力)
2021-03-23 16:19:31
这应该添加到标准的 jquery 库中
2021-04-09 16:19:31

从 jQuery 1.3 开始,此方法已弃用。为了让它工作,它需要定义为一个函数:

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

如果有人(像我一样)对包含定义中的am[3]表示什么感兴趣


关键/图例:jQuery 提供的参数可用于选择器定义:

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

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

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

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

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

在 jQuery 1.8 中,您需要使用

jQuery.expr[":"].icontains = jQuery.expr.createPseudo(function (arg) {                                                                                                                                                                
    return function (elem) {                                                            
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;        
    };                                                                                  
});
感谢更新。刚刚更新到 JQuery 1.8,它停止工作
2021-03-16 16:19:31
完美运行,谢谢!刚刚更新到 1.8,这停止工作。
2021-04-06 16:19:31