Попробуйте, чтобы увидеть, будет ли это лучше:
jQuery.expr[':'].icontains = function(a, i, m) {
return (a.textContent || a.innerText || getText([ a ]) || "")
.toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
Изменить: на самом деле, мне нужно изменить этот код, у вас нет доступа к elem
или match
так же, как ядро.
более чем вероятно, что это не будет быстрее, но это способ, которым реализован нативный: содержит.
Редактировать: Чтобы действительно сделать это быстрее в IE, вам может потребоваться представить элементы в объекте или массиве, а затем выполнить всю фильтрацию, используя этот массив, а не элементы html. Затем вы можете показать элементы на основе массива / объекта. Этот метод очень похож на то, как плагины с данными позволяют сортировать и фильтровать, что все еще достаточно быстро, чтобы быть приемлемым в IE.
Редактировать для комментария:
Вот как я бы реализовал фильтрацию с помощью массива:
http://jsfiddle.net/Tentonaxe/Ju6TF/1/
var $filterArgument = $("#filterargument");
var filterCache = $.map($(".filterbaar"),function(el){
return {
el: el,
text: (el.textContent || el.innerText || $.find.getText([ el ]) || "").toUpperCase()
};
});
$('#filterargument').keyup(performFilter);
function performFilter() {
/*var filterArgument = $("#filterargument").val();*/
var filterArgument = $filterArgument.val();
var t1 = +new Date;
$('.filterbaar').show();
if (filterArgument === '') {
return;
}
else {
$(filterCache).filter(function(el){
return this.text.indexOf(filterArgument.toUpperCase()) == -1;
}).each(function(){
$(this.el).hide();
});
}
var t2 = +new Date;
alert( filterArgument + ':' + (t2 - t1) + ' miliseconds');
}