是否有不区分大小写的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; };
如果有人(比如我)对“ 包含”定义中的a和m [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');