Показать сообщение отдельно
  #1 (permalink)  
Старый 24.10.2012, 18:18
Новичок на форуме
Отправить личное сообщение для [PC]Contra Посмотреть профиль Найти все сообщения от [PC]Contra
 
Регистрация: 24.10.2012
Сообщений: 3

Функция поиска на JS
<div><input id="find" type="text"/></div>

//Искалка:
        $('#find').live('click', function(){
            $.get("showEstimate",function(e){
                $('#find').keyup(function(){
                    searchText = $('#find').val().toLowerCase();
                    searchWord = searchText.toLowerCase().split(' ');
                    for(var i = 0; i < e.length; i++){
                        e[i].rating = 0;
                       
                        for(var j = 0; j < searchWord.length; j++){
                            if(searchWord[j].length > 2){
                                //                        console.log(searchWord.length + '->' + searchWord[j].length);
                                var ename = e[i].ename.toLowerCase();
                                if(ename.indexOf(searchWord[j]) > -1){
                                    //                                console.log(ename + '->' + searchWord[j] + '->' + ename.indexOf(searchWord[j]));
                                   
                                    e[i].rating ++;
                                   
                                }
                            }
                           
                        }
                        //                    console.log(e[i].rating);
                    }
                   
                    Array.prototype.sort.call(e, function(a, b) {
                        return a['rating'] > b['rating'] ? -1 : a['rating'] < b['rating'] ? 1 : 0;
                    });
                    for(i = 0; i < e.length; i ++){
                        if(e[i].rating > 0){
                            printEstimate(e, 3);
    //                        console.log(JSON.stringify(e[i]));
                        }
                    }
                   
                });
               
            }, 'json');
        });

Суть такая: при клике в поле поиска подгружается - $.get массив данных (название, номер). При вводе каждой буквы срабатывает ф-ция .keyup. Введенный текст searchText переводится в нижний регистр, дробится на слова searchWord.
Далее для каждой строчки массива данных (где мы ищем) прогоняется цикл, проверяющий на вхождение каждого из введенных слов на наличие в строчке массива. Если есть совпадение , то rating повышается. Ну а далее выводится по рейтингу, те строчки, где больше совпадений.
Внимание, вопрос: Работать то работает, но тормозит: при обработке массива из двух тысяч строк и двух введенных слов у мозилы занимает 15 сек. Как исправить?
Ответить с цитированием