// NEW selector
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
// OVERWRITES old selecor
jQuery.expr[':'].contains = function(a, i, m) {
return jQuery(a).text().toUpperCase()
.indexOf(m[3].toUpperCase()) >= 0;
};
更新以适用于 jQuery 1.8
$.expr[":"].contains = $.expr.createPseudo(function(arg) {
return function( elem ) {
return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
有了这个,
$("div:contains('John')")
将选择这三个元素
<div>john</div>
<div>John</div>
<div>hey hey JOHN hey hey</div>
演示 通过 Pablo Fortes。
前段时间,我在网上找到了这个片段
$.extend($.expr[":"], {
"containsNC": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
我更喜欢它,因为使用此代码,您保留了 :contains 选择器本身,并拥有一个新的 :containsNC 选择器,它不区分大小写。
$("div:containsNC('John')")
非常有用,我 RIGHT NOW 就需要它!我的问题是,我应该把第一部分放在哪里?
$.extend($.expr[":"], {
"containsNC": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
它应该放在 document ready 函数内部吗?它应该是一个单独的 js 文件吗?
我想在以下函数中使用它,该函数位于 “(function(){” 代码块中
$(document).on('keyup', '.rowFilter', function(e){
var table = $(this).parent().next('table').attr('id');
var rows = $( '#'+table+' tbody').find('tr').hide();
var data = this.value.split(" ");
$.each(data, function(i, v){
rows.filter(":containsNC('"+v+"')").show();
});
});
+1 赞成自定义选择器。覆盖核心行为不是一个好主意(如果有人已经依赖于同一项目中的大小写敏感性怎么办)。我从下面的评论中选择了 “icontains” 这个名字。
谢谢!这真的很有用,并且像魅力一样工作 (Y)
这很稳固,绝对有用,但我不能同意覆盖 jQuery 核心组件的行为。最好创建一个名为 “:icontains” 或类似名称的新选择器并使用它。
除此之外,谢谢!节省了我一些时间。
非常有用。我同意其他人的观点,它应该是一个新的伪选择器。
感谢您的文章,它帮助我很多,再次感谢
很棒的代码。只需复制粘贴即可运行
太棒了!对我来说非常有用 :) 谢谢
非常棒,谢谢!
我不理解代码 :(((
什么是 “jQuery.expr[‘:’]”?我找不到关于它的任何信息。
你怎么学习如何使用这个?
$.expr[“:”].contains
?
太棒的技巧!谢谢!
非常有用。谢谢!
我非常喜欢 Emanuele 的解决方案,因为有时我需要它区分大小写。但两者都非常有用,而且两者都应该成为 jQuery 的标准功能。
您好 Jonathan Gravois:我知道现在已经很晚了,您的问题可能已经得到解答。但我认为它对其他人会有所帮助。
$(document).on(‘keyup’, ‘.rowFilter’, function(e){
var table = $(this).parent().next(‘table’).attr(‘id’);
var rows = $( ‘#’+table+’ tbody’).find(‘tr’).hide();
var data = this.value.split(” “);
$.extend($.expr[“:”], { “containsNC”: function(elem, i, match, array) { return (elem.textContent || elem.innerText || “”).toLowerCase().indexOf((match[3] || “”).toLowerCase()) >= 0;
}
});
var oObj = $( “:containsNC(‘”+v+”‘)” );
$.each(data, function(i, v){
rows.filter(‘”+oObj+”‘).show();
});
});
简单有效。
喜欢它!谢谢
这是我的方法,应该相当容易理解。
我们正在搜索包含 “baskey” 的任何大小写变体的所有 “p” 元素。
var str =$(“p”).text();
var fnd = str.match(/baskey/gi);
fnd.forEach(function(a){
$(“p:contains(“+a+”)”).css({color:”red”});
});
:)baskey
节省了我很多时间。谢谢!
感谢您的片段!这应该已经包含在核心库中。
对于巴西用户,不区分大小写的带重音符的字符
Para brasileiros, case insensite substituindo acentos por sem acentos
Abraços
}
ecowebdesign . com . br
很棒的文章。
有没有办法在 Node.js cheerio 中使用它?
我得到了错误 TypeError: Cannot read property ‘:’ of undefined