是否有不区分大小写的jQuery:包含select器?

是否有一个不区分大小写的版本:包含 jQueryselect器或者我应该手动完成所有元素的循环和比较他们的.text()我的string?

我最终为jQuery 1.2做的是:

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

这将扩展jquery有一个:包含不区分大小写的select器,:包含select器保持不变。

编辑:对于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() 

在之前的expression式中速度相当快,所以如果速度是一个问题,请自行承担风险。 (见@约翰的问题 )

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

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

为了使其可以不区分大小写: 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

从jQuery 1.3开始,这个方法已经被弃用了。 为了实现这个function,需要将其定义为一个函数:

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

如果有人(比如我)对“ 包含”定义中的am [3]意味着什么感兴趣。


KEY / LEGEND:由jQuery提供的用于select器定义的参数:

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

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

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

m [2] =我们正在查找的nodeName或*(冒号左边)。

m [3] = param传递给:selector(param)。 通常是一个索引号,如:types(5)或string,如: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; }; }); 

似乎执行速度稍微快一点的变化也允许正则expression式是:

 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); } ); 


这不仅是不区分大小写,但它允许强大的search,如:

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

可能会迟到…但是,

我更喜欢这样

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

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

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

更新代码在1.3中效果很好,但是与前面的例子不同,“包含”在第一个字母应该是小写的。

使用下面的代码来使用“: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"); } }); 

你可以使用这个链接来find更多关于这个, 使用jQuery来searchHTML文本,并相应地显示或隐藏

您也可以使用此链接来查找基于您的jQuery版本的案例igonring代码, 使jQuery:包含不区分大小写

我有一个类似的问题,以下不工作…

 // This doesn't catch flac or Flac $('div.story span.Quality:not(:contains("FLAC"))').css("background-color", 'yellow'); 

这工作,而不需要扩展

 $('div.story span.Quality:not([data*="flac"])').css("background-color", 'yellow'); 

这也适用,但可能属于“手动循环”类别….

 $('div.story span.Quality').contents().filter(function() { return !/flac/i.test(this.nodeValue); }).parent().css("background-color", 'yellow');