2015-01-16 4 views
0

В настоящее время у меня есть Select2 в моем приложении, и ранее были реализованы вызовы ajax в базе данных, чтобы получить меньшее подмножество на основе поискового запроса, введенного пользователем.Выбирайте поиск по списку очень большого набора данных

Тем не менее, пользователи хотят иметь возможность щелкнуть стрелку назад в браузере и снова запустить запрос (что-то, что в настоящее время не происходит с Select2). Я смог реализовать это, вытащив весь набор данных (более 18 000 элементов) и вызвав select2.

Проблема в том, что Select2 в основном делает foreach в foreach при выполнении поиска (элемент foreach в наборе данных, просматривает каждую строку и получает индекс запроса), который, как я понимаю, в основном разбивает строку на массив символов и каждый отдельный символ, чтобы узнать, найдена ли комбинация). Поэтому каждый раз, когда кто-то вводит персонажа, мы просматриваем более 18 000 операций, хотя большинство элементов исключаются как опции.

Есть ли способ сделать Select2 фактически устранить варианты, которые не совпадают (создать и привязать к массиву temp или что-то в этом роде) или выполнить двоичный поиск вместо линейного поиска? Если нет, есть ли альтернативы Select2, которые DO реализуют бинарный поиск вместо линейного поиска, или мне нужно создать свой собственный jQuery-плагин для этого?

ответ

0

В этом jsfiddle скрытого выбора элемента используется, и клон, что для фильтрации входных данных. Фильтрация выполняется с:

for (var i = 0; i < that.selector.options.length; i++) { 
    if (re.test(that.selector.options[i].text)) { 
    sclone.add(new Option(that.selector.options[i].text, i)); 
    } 
} 

Где re является RegExp создан из поля ввода, расположенных над выбором клоном.

Возможно, это идея игры?

языка, используемый в первом селекторе является нидерландским, но я полагаю, что не должен быть обструктивными к идее.

Смежные вопросы