Быстрый поиск по большому списку с помощью jQuery

Я использую этот код для поиска около 500 тегов li.

$(function() {

    $.expr[":"].containsInCaseSensitive = function(el, i, m){
        var search = m[3];
        if (!search) return false;
        return eval("/" + search + "/i").test($(el).text());
    };  

    $('#query').focus().keyup(function(e){
        if(this.value.length > 0){
            $('ul#abbreviations li').hide();
            $('ul#abbreviations li:containsInCaseSensitive(' + this.value + ')').show();
        } else {
            $('ul#abbreviations li').show();    
        }
        if(e.keyCode == 13) {
            $(this).val('');
            $('ul#abbreviations li').show();
        }
    });

});

А вот и HTML:



ABC<span>description</span>
BCA<span>description</span>
ADC<span>description</span>

Этот скрипт очень медленный с таким количеством тегов li.

Как я могу сделать это быстрее, и как я могу искать только текст ABC в li, а не теги span (без изменения html)?

Я знаю о существующих плагинах, но мне нужна такая небольшая реализация.



Вот'готовый код для всех, кто заинтересован

var abbrs = {};

$('ul#abbreviations li').each(function(i){
    abbrs[this.firstChild.nodeValue] = i;
});

$('#query').focus().keyup(function(e){
    if(this.value.length >= 2){
        $('ul#abbreviations li').hide();
        var filterBy = this.value.toUpperCase();
        for (var abbr in abbrs) {
            if (abbr.indexOf(filterBy) !== -1) {
               var li = abbrs[abbr];
               $('ul#abbreviations li:eq('+li+')').show();
            }
        }       
    } else {
        $('ul#abbreviations li').show();    
    }
    if(e.keyCode == 13) {
        $(this).val('');
        $('ul#abbreviations li').show();
    }   
});

Ответы на вопрос(4)

Ваш ответ на вопрос