是否有不区分大小写的:contains jQuery 选择器版本,还是我应该通过循环所有元素并将它们的 .text() 与我的字符串进行比较来手动完成工作?
是否有不区分大小写的 jQuery :contains 选择器?
IT技术
javascript
jquery
jquery-selectors
2021-01-09 16:19:31
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;
};
});
使其可选不区分大小写: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 开始,此方法已弃用。为了让它工作,它需要定义为一个函数:
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
如果有人(像我一样)对包含定义中的a和m[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;
};
});