是否存在不区分大小写的 jQuery :contains selector?
2022-08-30 03:05:48
是否存在不区分大小写的 :contains jQuery 选择器版本,或者我应该通过循环访问所有元素并将其 .text() 与我的字符串进行比较来手动完成工作?
是否存在不区分大小写的 :contains jQuery 选择器版本,或者我应该通过循环访问所有元素并将其 .text() 与我的字符串进行比较来手动完成工作?
我最终为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