Подсказка при наборе текста
Делаю подсказку при наборе текста:
arr - массив с подсказками, например ["мебель"] value - строка с запросом пользователя, например "меб" for (var i = 0; < arr.length; i++) // перебираем массив if (value == arr[i].substr(0, value.length)) // ищем совпадение // выводим подсказку "мебель" Для запросов и элементов состоящих из одного слова это работает отлично, но есть же ещё и словосочетания. Например, arr = ["мебель офисная"], по запросу "меб" найдёт, но по запросу "офисн" не найдёт. Ок, думаю, надо значит элементы-словосочетания пробелом в новый массив дробить и производить поиск уже в этом новом массиве. arr2 = ["мебель", "офисная"] Так и по "меб" найдёт и по "офисн" тоже. А по запросам "мебель офисная" и "офисная мебель" не найдёт! Значит, думаю, нужно их добавить: arr2 = ["мебель", "офисная", "офисная мебель", "мебель офисная"] Но тогда отдельные то слова мне зачем? В итоге получается что словосочетания нужно дробить на отдельные слова и перебирать их в новом массиве во всех возможных вариантах: arr2 = ["офисная мебель", "мебель офисная"] А если не 2, а 3 слова? 3 слова - 6 комбинаций 4 слова - 24 комбинаций 5 слов - 120 комбинаций 6 слов - 720 комбинаций Помимо громадного количества комбинаций вылезает ещё проблема этой самой подсказки. Например по запросу "моск" будет вылезать подсказка "офисная мебель в москве". Ничего страшного, конечно, но хотелось бы видеть вводимое слово на первом месте, можно его конечно передвинуть в начало строки, но не всегда это выглядит нормально: "москве офисная мебель в", значит нужно переносить с предлогом: "в москве офисная мебель". Далее на горизонте уже маячит проблема того, что вся подсказка будет забита каким то мусором, в котором что то там в конце строки совпало. В общем, тут я понял что изобретаю велосипед и решил спросить совета. |
Посмотри здесь: http://jqueryui.com/autocomplete/
|
PesBarbos,
если вы не поисковик делаите, как яндекс, то достаточно поиска на 1слово -- а следующее слово если есть такая необходимость берите из того текста с которым работаите (или одно из следующих слов)- нет в вашем тексте офисной сковородки и не фиг тогда и хранить такую комбинацию |
<html> <head> <meta charset="windows-1251" /> </head> <body> <input /> <div> </div> <script> div=document.querySelector("div") document.querySelector("input").oninput=function(){ var re=new RegExp(this.value), text="" for(var i=0; i<arr.length; i++){if(re.test(arr[i])) text+=arr[i]+"<br>"} div.innerHTML=text } arr=[ "мебель офисная", "стол компьютерный", "стул мягкий" ] </script> </body> </html> |
<input type="text" list="suggestions"> <datalist id="suggestions"> <option>мебель офисная</option> <option>стол компьютерный</option> <option>стул мягкий</option> </datalist> |
Всем привет!
Уважаемые, krutoy и danik.js. Все это хорошо. Но... Но проблема в браузерах. Погоняйте свой код (да и любое автодополнение) на Mozila,Opera, Safari и др. Включите планшет и там через UC, Dolphin, Веб-браузер. Ощутите всю "мощь" браузерных возможностей. Сделай продукт кроссбраузерным! P.S.: Цитата:
|
Цитата:
|
Уважаемый, krutoy.
Все что вы указали кросбраузерно... Но... 1) Я не говорил о вашем скрипте ничего. 2) В разных браузерах разный принцип автодополнения: Пример -Chrome: ищет только по полному соответствию вводимых символов относительно начала строки вхождения. -Mozila: ищет подстроку в строке не зависимо от точки вхождения. 3) Для русского алфавита есть зависимость от регистра вводимых символов. Для английского нет. Я вел речь о поддержке браузерами самого автодополнения как такового. И все дело не в тегах HTML и синтаксиса Jquery или JavaScript, а именно в движке браузера. Эксперементируйте. И увидите сами. А насколько я понял, PesBarbos желал бы реализацию как в Mozila Firefox, и более того, регистронезависимую. Причем на любом из браузеров чтобы работало так, как задумано разработчиком, а не так, как хочет тот или иной браузер. чтобы при вводе: сту мяг СтУ мЯг Результат автодополнения(в любом случае): стул мягкий |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 17:53. |