В конечном итоге я сделал для jQuery 1.2:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
Это расширит jquery, чтобы иметь селектор: Contains без учета регистра, селектор: содержит без изменений.
Редактировать: Для jQuery 1.3 (спасибо @ user95227) и более поздних версий вам нужно
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Edit:
По-видимому, прямой доступ к DOM с помощью
(a.textContent || a.innerText || "")
вместо
jQuery(a).text()
В предыдущем выражении оно значительно ускоряется, поэтому попробуйте на свой страх и риск, если скорость является проблемой. (см. @ Джон вопрос )
Последнее редактирование: для jQuery 1.8 должно быть:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});