﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Веб-программирование / JavaScript  / Оптимизация поиска в выпадающем списке / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Sat, 10 Jan 2009 07:38:47 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>&amp;lt;TEXTAREA ROWS=5 COLS=20 WRAP="on" id="mu_text" VALUE="" step=0 onkeypress="find_mi(event,this)"&amp;gt;&amp;lt;/TEXTAREA&amp;gt;&lt;BR&gt;&amp;lt;p&amp;gt;&lt;BR&gt;&amp;lt;SELECT name="lst" size="2" id="lst"&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;---&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="1"&amp;gt;толики&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="2"&amp;gt;тоня&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="3"&amp;gt;тося&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="4"&amp;gt;тосик&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="5"&amp;gt;соня&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;/select&amp;gt;&lt;BR&gt;&amp;lt;SCRIPT LANGUAGE="JavaScript"&amp;gt;&lt;BR&gt; &amp;lt;!--&lt;BR&gt;var find_=[];&lt;BR&gt;var rr=document.getElementById("lst").options;//&lt;BR&gt;for(i=0;i&amp;lt;rr.length;i++)&lt;BR&gt;{&lt;BR&gt;find_[i]=rr[i].text;//&lt;BR&gt;}&lt;BR&gt;document.title=rr.length;&lt;BR&gt;var n_find="";&lt;BR&gt;var n_evt="";&lt;BR&gt;var k=0;&lt;BR&gt; function mu_pole(it){&lt;BR&gt;rr[it].selected=true;//&lt;BR&gt;window.status=rr[it].value;&lt;BR&gt;}&lt;BR&gt; function find_mi(f_evt,x){&lt;BR&gt;     if(f_evt.keyCode&amp;lt;=32){n_evt="";k=0;x.step=0;n_find="";event.returnValue=true;return}&lt;BR&gt;     var poz_=x.step;&lt;/P&gt;&lt;P&gt; for(var i=0;i&amp;lt;find_.length;i++)&lt;BR&gt; {&lt;BR&gt;  if(find_[i].length&amp;gt;k){for(j=0;j&amp;lt;=k;j++){n_find+=find_[i].charCodeAt(j);}}&lt;BR&gt;     if(n_find==(n_evt+""+f_evt.keyCode)&amp;amp;&amp;amp;poz_==k)&lt;BR&gt;     {n_evt+=f_evt.keyCode;n_find="";k++;x.step=k;mu_pole(i);event.returnValue=true;break;}&lt;BR&gt;  else&lt;BR&gt;  {n_find="";if(i==find_.length-1){mu_pole(0);x.step=100;n_find="";}}&lt;BR&gt;  }&lt;BR&gt; } &lt;BR&gt; //--&amp;gt;&lt;BR&gt; &amp;lt;/SCRIPT&amp;gt; &lt;BR&gt;</description><pubDate>Thu, 22 Mar 2007 13:58:50 GMT</pubDate><dc:creator>Владимир_М</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>Если честно, то я в этом коде абсолютно не разобрался. Куда и как надо загружать список слов? а откуда выбирать числовые значения слова, выбранного пользователем?&lt;/P&gt;&lt;P&gt;Ну дайте хоть какие-то комментарии что и к чему, и как это работает.</description><pubDate>Tue, 06 Mar 2007 14:06:15 GMT</pubDate><dc:creator>evgenybe</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>&amp;lt;form class="inc" onsubmit="mu_paste(this.form)"&amp;gt;&lt;BR&gt;&amp;lt;div id="info" style="display: none; width: 200px; height: 30px; position: absolute;"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR&gt;&amp;lt;INPUT  TYPE="text" NAME="name"  id="mu_text" VALUE="" step=0 onkeypress="find_mi(event,this)"&amp;gt;&lt;BR&gt;&amp;lt;/form&amp;gt;&lt;BR&gt;Скажем, на странице есть &lt;BR&gt;&amp;lt;SELECT name="lst" size="4" id="lst"&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;---&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;толики&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="1"&amp;gt;вася&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;петя&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;петруша&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;петя-сан&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;толиков&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;петя-сана&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;толиковна&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;наташа&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;/Select&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;BR&gt;&amp;lt;SCRIPT LANGUAGE="JavaScript"&amp;gt;&lt;BR&gt;&amp;lt;!--&lt;BR&gt;var find_=[];&lt;BR&gt;var rr=document.getElementById("lst").options;//&lt;BR&gt;for(i=0;i&amp;lt;rr.length;i++)&lt;BR&gt;{&lt;BR&gt;find_[i]=rr[i].text;//&lt;BR&gt;}&lt;BR&gt;var n_find="";&lt;BR&gt;var n_evt="";&lt;BR&gt;var k=0;&lt;BR&gt;var obj=document.getElementById("info");&lt;BR&gt;var obj_txt=document.getElementById("mu_text");&lt;BR&gt;function mu_pole(x_text,it){&lt;BR&gt;var objRange = document.selection.createRange();&lt;BR&gt;obj.style.top = objRange.offsetTop+15;&lt;BR&gt;obj.style.left = objRange.offsetLeft+20;&lt;BR&gt;obj.innerHTML = x_text.slice(obj_txt.step);&lt;BR&gt;obj.style.display = "block";&lt;BR&gt;rr[it].selected=true;//&lt;BR&gt;}&lt;BR&gt;function hide_mu_pole(it){obj.innerHTML = "";obj.style.display = "none";if(it){rr[0].selected=true;/**/}}&lt;BR&gt;function mu_paste(ent_){if(obj.innerHTML!=""){obj_txt.value+=obj.innerHTML;obj.innerHTML = "";hide_mu_pole();event.returnValue=false;}event.returnValue=false;}&lt;BR&gt;function find_mi(f_evt,x){&lt;BR&gt; var poz_=x.step;&lt;BR&gt; if(f_evt.keyCode==8){obj_txt.step=100;if(obj.style.display =="block"){hide_mu_pole();event.returnValue=true;return}event.returnValue=true;return}&lt;BR&gt; if(f_evt.keyCode==32){n_evt="";k=0;x.step=0;n_find="";if(obj.style.display =="block"){hide_mu_pole();return;}return;}&lt;BR&gt; if(f_evt.keyCode==13){x.step=k;return;}&lt;BR&gt; for(var i=0;i&amp;lt;find_.length;i++)&lt;BR&gt; {&lt;BR&gt;  if(find_[i].length&amp;gt;k){for(j=0;j&amp;lt;=k;j++){n_find+=find_[i].charCodeAt(j);}}&lt;BR&gt;     if(n_find==(n_evt+""+f_evt.keyCode)&amp;amp;&amp;amp;poz_==k)&lt;BR&gt;     {n_evt+=f_evt.keyCode;n_find="";k++;x.step=k;mu_pole(find_[i],i);event.returnValue=true;break;}&lt;BR&gt;  else&lt;BR&gt;  {n_find="";if(obj.style.display =="block"&amp;amp;&amp;amp;i==find_.length-1){hide_mu_pole(i);n_find="";n_evt+=f_evt.keyCode;k++;x.step=k;}if(i==find_.length-1){x.step=100;n_find="";}}&lt;BR&gt;  }&lt;BR&gt; }&lt;BR&gt;//--&amp;gt;&lt;BR&gt;&amp;lt;/SCRIPT&amp;gt;&lt;BR&gt;//примерно так, но здесь много лишнего. писалось сие давно и для другого( что то похожее на Т9 в тел.)&lt;BR&gt;//привел больше для демонстрации что "тормозов" должно не быть.</description><pubDate>Tue, 21 Nov 2006 17:00:07 GMT</pubDate><dc:creator>Владимир_М</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>Здравствуйте, Владимир!&lt;/P&gt;&lt;P&gt;Объясните, плз, как пользоваться вашей разработкой. &lt;/P&gt;&lt;P&gt;Скажем, на странице есть &amp;lt;input type="text" id="txt"&amp;gt; &lt;BR&gt;и есть&lt;BR&gt;&amp;lt;SELECT name="lst" size="4" id="lst"&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="1"&amp;gt;Вася&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;Петя&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;Петруша&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;Петя-сан&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;Толик&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;option value="0"&amp;gt;Наташа&amp;lt;/option&amp;gt;&lt;BR&gt;&amp;lt;/Select&amp;gt;&lt;BR&gt;Мне необходимо вводя в текстовое окошко поочередно буквы, чтобы соответствующая &amp;lt;option&amp;gt; становилась SELECTED.&lt;BR&gt;</description><pubDate>Fri, 17 Nov 2006 10:49:28 GMT</pubDate><dc:creator>evgenybe</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>&amp;lt;div id="info" style="display: none; width: 200px; height: 30px; position: absolute;"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR&gt;&amp;lt;form class="inc" onsubmit="mu_paste(this.form)"&amp;gt;&lt;BR&gt;&amp;lt;INPUT  TYPE="text" NAME="name"  id="mu_text" VALUE="" step=0 onkeypress="find_mi(event,this)"&amp;gt;&lt;BR&gt;&amp;lt;/form&amp;gt;&lt;BR&gt;&amp;lt;SCRIPT LANGUAGE="JavaScript"&amp;gt;&lt;BR&gt;&amp;lt;!--&lt;BR&gt;var find_=["слова","для","поиска"];&lt;BR&gt;var n_find="";&lt;BR&gt;var n_evt="";&lt;BR&gt;var k=0;&lt;BR&gt;var obj=document.getElementById("info");&lt;BR&gt;var obj_txt=document.getElementById("mu_text");&lt;BR&gt;function mu_pole(x_text){&lt;BR&gt;var objRange = document.selection.createRange();&lt;BR&gt;obj.style.top = objRange.offsetTop+15;&lt;BR&gt;obj.style.left = objRange.offsetLeft+20;&lt;BR&gt;obj.innerHTML = x_text.slice(obj_txt.step);&lt;BR&gt;obj.style.display = "block";&lt;BR&gt;}&lt;BR&gt;function hide_mu_pole(){obj.innerHTML = "";obj.style.display = "none";}&lt;BR&gt;function mu_paste(ent_){if(obj.innerHTML!=""){obj_txt.value+=obj.innerHTML;obj.innerHTML = "";hide_mu_pole();event.returnValue=false;}event.returnValue=false;}&lt;BR&gt;function find_mi(f_evt,x){&lt;BR&gt; var poz_=x.step;&lt;BR&gt; if(f_evt.keyCode==8){obj_txt.step=100;if(obj.style.display =="block"){hide_mu_pole();event.returnValue=true;return}event.returnValue=true;return}&lt;BR&gt; if(f_evt.keyCode==32){n_evt="";k=0;x.step=0;n_find="";if(obj.style.display =="block"){hide_mu_pole();return;}return;}&lt;BR&gt; if(f_evt.keyCode==13){x.step=k;return;}&lt;BR&gt; for(var i=0;i&amp;lt;find_.length;i++)&lt;BR&gt; {&lt;BR&gt;  if(find_[i].length&amp;gt;k){for(j=0;j&amp;lt;=k;j++){n_find+=find_[i].charCodeAt(j);}}&lt;BR&gt;     if(n_find==(n_evt+""+f_evt.keyCode)&amp;amp;&amp;amp;poz_==k)&lt;BR&gt;     {n_evt+=f_evt.keyCode;n_find="";k++;x.step=k;mu_pole(find_[i]);event.returnValue=true;break;}&lt;BR&gt;  else&lt;BR&gt;  {n_find="";if(obj.style.display =="block"&amp;amp;&amp;amp;i==find_.length-1){hide_mu_pole();n_find="";n_evt+=f_evt.keyCode;k++;x.step=k;}if(i==find_.length-1){x.step=100;n_find="";}}&lt;BR&gt;  }&lt;BR&gt; }&lt;BR&gt;//--&amp;gt;&lt;BR&gt;&amp;lt;/SCRIPT&amp;gt;&lt;/P&gt;&lt;P&gt;//IE -тормозов при 8000 слов наблюдал около 1 сек.</description><pubDate>Wed, 15 Nov 2006 16:08:09 GMT</pubDate><dc:creator>Владимир_М</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>Еще подумал, если страница генерируется каким то серверным приложением, а не пишется руками, то не худшей идеей будет сделать не один селект а несколько - по количеству букв в алфавите. И в зависимости от первой веденной буквы делать видимым нужный селект скриптом, а остальные - невидимыми. Вообще можно заменить индексирование через массивы и скрипты н-ным количеством селектов созданных еще на сервере или уже у пользователя скриптом чтобы не слать некоторые елементы по нескольку раз. То есть переслать пользователю скрипт который через document.write создаст это н-ное колчичество селектов.&lt;/P&gt;&lt;P&gt;Мне почему то кажется что много елементов это лучше чем много сложных скриптов.</description><pubDate>Wed, 08 Nov 2006 18:56:25 GMT</pubDate><dc:creator>DarkSet</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>В принципе если записи упорядочены по алфавиту то достаточно создать таблицу с номерами первых вхождений каждой буквы, а не всех. Всегда можно определить все как первое вхождение следующей буквы - первое вхождение текущей</description><pubDate>Wed, 08 Nov 2006 10:46:23 GMT</pubDate><dc:creator>DarkSet</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>[quote][b]evgenybe (07.11.2006)[/b][hr]А как создать индексы? Не совсем понял.[/quote]&lt;/P&gt;&lt;P&gt;В данном случае индекс можно представить в виде хеш-таблицы где в качестве ключа выступает первая буква слова, а в качестве значения номера строк (в виде массива) где есть слова начинающиеся с этой буквы. Так как создание индекса тоже потребует времени, то можно подготовить его на стороне сервера. Если список не меняется или меняется очень редко, то код JavaScript для инициализации индекса можно разместить в кеше. Тогда скорость поиска должна заметно улучшиться.</description><pubDate>Tue, 07 Nov 2006 19:15:36 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>Я неправильно ответил на вопрос "где искать. С начала или везде?". Подумал что где среди записей искать. Искать совпадения надо всегда от начала слова.&lt;/P&gt;&lt;P&gt;А как создать индексы? Не совсем понял.</description><pubDate>Tue, 07 Nov 2006 18:40:14 GMT</pubDate><dc:creator>evgenybe</dc:creator></item><item><title>RE: Оптимизация поиска в выпадающем списке</title><link>http://relib.com/forums/Topic907001-10-1.aspx</link><description>Я бы попробовал создать индекс вхождения букв в строки. То есть буква А (в любом регистре) есть в таких-то строках, буква Б в таких-то и т.д. Тогда при вводе первой буквы уже будем знать номер первой позиции, при вводе второй нужно будет выполнять поиск, только в тех строках где есть первая буква (по ходу формируя массив с номерами строк где есть обе введенные буквы). При вводе третьей буквы продолжаем поиск в номерах позиций найденных в прошлом шаге. Так до момента когда будет найдено или не будет найдено полное совпадение.</description><pubDate>Tue, 07 Nov 2006 15:38:48 GMT</pubDate><dc:creator>bazile</dc:creator></item></channel></rss>