Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Поиск на JavaScript
Форумы портала PHP.SU » » Хранилище функций на JavaScript » Поиск на JavaScript

Страниц (1): [1]
 

1. valenok - 12 Апреля, 2007 - 10:40:37 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. function translate(str){
  3.  
  4.        
  5.         str = str.replace(/%20/gi," ");
  6.         str = str.replace(/%D0%[B9]0/gi,"а");
  7.         str = str.replace(/%D0%[B9]1/gi,"б");
  8.         str = str.replace(/%D0%[B9]2/gi,"в");
  9.         str = str.replace(/%D0%[B9]3/gi,"г");
  10.         str = str.replace(/%D0%[B9]4/gi,"д");
  11.         str = str.replace(/%D0%[B9]5/gi,"е");
  12.         str = str.replace(/%D(1%9|0%8)1/gi,"ё");
  13.         str = str.replace(/%D0%[B9]6/gi,"ж");
  14.         str = str.replace(/%D0%[B9]7/gi,"з");
  15.         str = str.replace(/%D0%[B9]8/gi,"и");
  16.         str = str.replace(/%D0%[B9]9/gi,"й");
  17.         str = str.replace(/%D0%[B9]A/gi,"к");
  18.         str = str.replace(/%D0%[B9]B/gi,"л");
  19.         str = str.replace(/%D0%[B9]C/gi,"м");
  20.         str = str.replace(/%D0%[B9]D/gi,"н");
  21.         str = str.replace(/%D0%[B9]E/gi,"о");
  22.         str = str.replace(/%D0%[B9]F/gi,"п");
  23.         str = str.replace(/%D(1%8|0%A)0/gi,"р");
  24.         str = str.replace(/%D(1%8|0%A)1/gi,"с");
  25.         str = str.replace(/%D(1%8|0%A)2/gi,"т");
  26.         str = str.replace(/%D(1%8|0%A)3/gi,"у");
  27.         str = str.replace(/%D(1%8|0%A)4/gi,"ф");
  28.         str = str.replace(/%D(1%8|0%A)5/gi,"х");
  29.         str = str.replace(/%D(1%8|0%A)6/gi,"ц");
  30.         str = str.replace(/%D(1%8|0%A)7/gi,"ч");
  31.         str = str.replace(/%D(1%8|0%A)8/gi,"ш");
  32.         str = str.replace(/%D(1%8|0%A)9/gi,"щ");
  33.         str = str.replace(/%D(1%8|0%A)C/gi,"ь");
  34.         str = str.replace(/%D(1%8|0%A)A/gi,"ъ");
  35.         str = str.replace(/%D(1%8|0%A)B/gi,"ы");
  36.         str = str.replace(/%D(1%8|0%A)D/gi,"э");
  37.         str = str.replace(/%D(1%8|0%A)E/gi,"ю");
  38.         str = str.replace(/%D(1%8|0%A)F/gi,"я");
  39.  
  40.  
  41.  
  42. return(str);
  43. }
  44.  
  45.  
  46. function ampersand(str){  
  47.  
  48.                 var str = str.split('search=');
  49.                 if(str[1].indexOf('#')!=-1){
  50.                         var str = str[1].substr(0,str[1].indexOf('#'));
  51.                 }else{
  52.                         var str=str[1];
  53.                 };
  54.        
  55. return(str);
  56. };
  57.  
  58.  
  59. function name_it(str){
  60.         if(str.indexOf('#')!=-1){
  61.                 var name = str.substr(str.indexOf('#')+1);
  62.                 if(name.indexOf('#')!=-1) var name = name.substr(0,name.indexOf('#'));
  63.         };
  64. return(name);
  65. };
  66.  
  67.  
  68. var request = document.location.href;
  69.  
  70. if(request.indexOf('search=')!=-1){
  71.         var str = ampersand(request);
  72.         if(request.indexOf('%')!=-1){var str = translate(str);}
  73.         if(request.indexOf('#')!=-1){var name = name_it(request);}
  74.         var str = str.replace(/(^ *)|( *$)/,""); // trim()
  75.        
  76.        
  77.         var regexp = "("+str+")";
  78.         var patern =  new RegExp(regexp,"ig");
  79.        
  80.        
  81.         document.getElementById('page').innerHTML =
  82.                 document.getElementById('page').innerHTML.replace
  83.                 (patern, "<b style='background-color:#FFCC00;'>$1</b>");
  84.        
  85.  
  86. }
  87.  



Ищем так: page.php?search=слово
Весь текст по которому нужно осуществлять поиск, заключить в контейнер с параметром id='page'

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


Существующий недочёт -
использовать теги внутри этого контейнера будет сложновато, так как при поиске слова loop (пример), такая страница может дать сбой:

PHP:
скопировать код в буфер обмена
  1.  
  2. <div id='loop'>
  3.  
  4. Вы можете прикрепить файл к сообщению.
  5. Максимальный <b class='loop'>размер</b> файла (в байтах): <span class='loop'>307200</span>
  6. <embed src='' loop=True>
  7. Разрешенные к загрузке расширения: zip,rar,gz,7z,bz2,tar,txt,jpeg,jpg,png,gif
  8.  
  9. </div>
  10.  


Буду рад, кто поможет доработать.
Автор я =)
2. UserID - 12 Апреля, 2007 - 13:54:35 - перейти к сообщению
valenok Как всегда рулит.

Ты это, на будущее, объясняй какой сбой может дать такой поиск. Ну коль ты ео не привёл, тогда я расскажу вкратце, какой первый баг может быть.
З.Ы. Сразу скажу, скрипт не проверял, смотрел только на глаз.

Значит так, при поиске слова loop в заданном контейнере мы можем получить примерно следующее:

До поиска:
PHP:
скопировать код в буфер обмена
  1.  
  2. <div id='loop'>
  3. Вы можете прикрепить файл к сообщению.
  4.  Максимальный <b class='loop'>размер</b> файла (в байтах): <span class='loop'>307200</span>
  5.  <embed src='' loop=True>
  6.  Разрешенные к загрузке расширения: zip,rar,gz,7z,bz2,tar,txt,jpeg,jpg,png,gif
  7. </div>
  8.  


После поиска:
PHP:
скопировать код в буфер обмена
  1.  
  2. <div id='loop'>
  3. Вы можете прикрепить файл к сообщению.
  4.  Максимальный <b class='<b style='background-color:#FFCC00;'>
  5. loop</b>'>размер</b> файла (в байтах): <span class='<b style=
  6. 'background-color:#FFCC00;'>loop</b>'>307200</span>
  7. <embed src='' <b style='background-color:#FFCC00;'>loop</b>=True>
  8. Разрешенные к загрузке расширения: zip, rar, gz, 7z, bz2, tar, txt, jpeg, jpg, png, gif
  9. </div>
  10.  


Вот. Что не есть хорошо, даже я бы сказал совсем плохо.

Возможное решение.... хм.
Я не силён в регулярах, но я бы сделал так. Все тэги (в миру node-ы) заменил через регулярное выражение, на какое-нибудь уникальное сочетание, типа {HU}, а затем уже реализовывал поиск. После поиска, делаем обратное преобразование {HU}, предварительно где-то храня массив заменённых нодов.

Валенок, с меня пиво, если сделаешь Улыбка))

ЗЫ. Кстати, баг на самом деле жуткий Улыбка частично дефейснул эту страницу. Вроде как исправил.
3. -SCHATTEN- - 12 Апреля, 2007 - 13:58:07 - перейти к сообщению
А пиво ты ему по почте отправишь ?
4. UserID - 12 Апреля, 2007 - 14:04:10 - перейти к сообщению
-SCHATTEN-

Знаешь, я просто не люблю исправлять или дополнять чьи-то ошибки, или какие-то непонятные места. Я лучше 10 раз перепишу заново, но это будет своё, где я знаю каждую переменную и функцию практически "в лицо" Улыбка Поэтому будем ждать от Валенка результаты. Честно говоря самому интересно, потому что сам этим сейчас занимаюсь.
5. valenok - 12 Апреля, 2007 - 15:40:20 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. function translate(str){
  3.  
  4.         str = str.replace(/%20/gi," ");
  5.  
  6.            // UTF - 8
  7.         str = str.replace(/%D0%[B9]0/gi,"а");
  8.         str = str.replace(/%D0%[B9]1/gi,"б");
  9.         str = str.replace(/%D0%[B9]2/gi,"в");
  10.         str = str.replace(/%D0%[B9]3/gi,"г");
  11.         str = str.replace(/%D0%[B9]4/gi,"д");
  12.         str = str.replace(/%D0%[B9]5/gi,"е");
  13.         str = str.replace(/%D(1%9|0%8)1/gi,"ё");
  14.         str = str.replace(/%D0%[B9]6/gi,"ж");
  15.         str = str.replace(/%D0%[B9]7/gi,"з");
  16.         str = str.replace(/%D0%[B9]8/gi,"и");
  17.         str = str.replace(/%D0%[B9]9/gi,"й");
  18.         str = str.replace(/%D0%[B9]A/gi,"к");
  19.         str = str.replace(/%D0%[B9]B/gi,"л");
  20.         str = str.replace(/%D0%[B9]C/gi,"м");
  21.         str = str.replace(/%D0%[B9]D/gi,"н");
  22.         str = str.replace(/%D0%[B9]E/gi,"о");
  23.         str = str.replace(/%D0%[B9]F/gi,"п");
  24.         str = str.replace(/%D(1%8|0%A)0/gi,"р");
  25.         str = str.replace(/%D(1%8|0%A)1/gi,"с");
  26.         str = str.replace(/%D(1%8|0%A)2/gi,"т");
  27.         str = str.replace(/%D(1%8|0%A)3/gi,"у");
  28.         str = str.replace(/%D(1%8|0%A)4/gi,"ф");
  29.         str = str.replace(/%D(1%8|0%A)5/gi,"х");
  30.         str = str.replace(/%D(1%8|0%A)6/gi,"ц");
  31.         str = str.replace(/%D(1%8|0%A)7/gi,"ч");
  32.         str = str.replace(/%D(1%8|0%A)8/gi,"ш");
  33.         str = str.replace(/%D(1%8|0%A)9/gi,"щ");
  34.         str = str.replace(/%D(1%8|0%A)C/gi,"ь");
  35.         str = str.replace(/%D(1%8|0%A)A/gi,"ъ");
  36.         str = str.replace(/%D(1%8|0%A)B/gi,"ы");
  37.         str = str.replace(/%D(1%8|0%A)D/gi,"э");
  38.         str = str.replace(/%D(1%8|0%A)E/gi,"ю");
  39.         str = str.replace(/%D(1%8|0%A)F/gi,"я");
  40.  
  41.                 // Unicode
  42.         str = str.replace(/%[CE]0/gi,"а");
  43.         str = str.replace(/%[CE]1/gi,"б");
  44.         str = str.replace(/%[CE]2/gi,"в");
  45.         str = str.replace(/%[CE]3/gi,"г");
  46.         str = str.replace(/%[CE]4/gi,"д");
  47.         str = str.replace(/%[CE]5/gi,"е");
  48.         str = str.replace(/%[AB]8/gi,"ё");
  49.         str = str.replace(/%[CE]6/gi,"ж");
  50.         str = str.replace(/%[CE]7/gi,"з");
  51.         str = str.replace(/%[CE]8/gi,"и");
  52.         str = str.replace(/%[CE]9/gi,"й");
  53.         str = str.replace(/%[EC]A/gi,"к");
  54.         str = str.replace(/%[EC]B/gi,"л");
  55.         str = str.replace(/%[EC]C/gi,"м");
  56.         str = str.replace(/%[EC]D/gi,"н");
  57.         str = str.replace(/%[EC]E/gi,"о");
  58.         str = str.replace(/%[EC]F/gi,"п");
  59.         str = str.replace(/%[FD]0/gi,"р");
  60.         str = str.replace(/%[FD]1/gi,"с");
  61.         str = str.replace(/%[FD]2/gi,"т");
  62.         str = str.replace(/%[FD]3/gi,"у");
  63.         str = str.replace(/%[FD]4/gi,"ф");
  64.         str = str.replace(/%[FD]5/gi,"х");
  65.         str = str.replace(/%[FD]6/gi,"ц");
  66.         str = str.replace(/%[FD]7/gi,"ч");
  67.         str = str.replace(/%[FD]8/gi,"ш");
  68.         str = str.replace(/%[FD]9/gi,"щ");
  69.         str = str.replace(/%[FD]C/gi,"ь");
  70.         str = str.replace(/%[FD]A/gi,"ъ");
  71.         str = str.replace(/%[FD]B/gi,"ы");
  72.         str = str.replace(/%[FD]D/gi,"э");
  73.         str = str.replace(/%[FD]E/gi,"ю");
  74.         str = str.replace(/%[FD]F/gi,"я");
  75.  
  76. return(str);
  77. }
  78.  
  79.  
  80. function ampersand(str){  
  81.  
  82.                 var str = str.split('search=');
  83.                 if(str[1].indexOf('#')!=-1){
  84.                         var str = str[1].substr(0,str[1].indexOf('#'));
  85.                 }else{
  86.                         var str=str[1];
  87.                 };
  88.        
  89. return(str);
  90. };
  91.  
  92.  
  93. function name_it(str){
  94.         if(str.indexOf('#')!=-1){
  95.                 var name = str.substr(str.indexOf('#')+1);
  96.                 if(name.indexOf('#')!=-1) var name = name.substr(0,name.indexOf('#'));
  97.         };
  98. return(name);
  99. };
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106. var request = document.location.href;
  107.  
  108. if(request.indexOf('search=')!=-1){
  109.         var str = ampersand(request);
  110.         if(request.indexOf('%')!=-1){var str = translate(str);}
  111.         if(request.indexOf('#')!=-1){var name = name_it(request);}
  112.         var str = str.replace(/(^ *)|( *$)/,""); // trim()
  113.        
  114.         words = str.split(" ");
  115.  
  116.         for(k=0;k<words.length;k++){
  117.                 str = words[k];
  118.        
  119.                 var regexp = "\\("+str+"\\)";
  120.                 var patern =  new RegExp(regexp,"ig");
  121.        
  122.        
  123.                 object = document.getElementById('page').innerHTML;
  124.  
  125.                 pre_regexp = "\\(="+str+"\\)";
  126.                 pre_regexp =  new RegExp(pre_regexp,"ig");
  127.                 object = object.replace(pre_regexp,"=0-0");
  128.  
  129.                 pre_regexp = "\\(='"+str+"'\\)";
  130.                 pre_regexp =  new RegExp(pre_regexp,"ig");
  131.                 object = object.replace(pre_regexp,"=0-0");
  132.  
  133.        
  134.                 pre_regexp = "\\(=\\""+str+"\\"\\)";
  135.                 pre_regexp =  new RegExp(pre_regexp,"ig");
  136.                 object = object.replace(pre_regexp,"=0-0");
  137.  
  138.                 object = object.replace(patern, "<b style='background-color:#FFCC00;'>$1</b>");
  139.  
  140.                 post_regexp = "\\(=0-0\\)";
  141.                 post_regexp =  new RegExp(post_regexp,"ig");
  142.                 object = object.replace(post_regexp,"='"+str+"'");
  143.  
  144.                 document.getElementById('page').innerHTML = object;
  145.  
  146.         }
  147.  
  148. }
  149.  
  150.  



Исправления:

  • функция translate() декодировала только UTF-8 и работала только с кодированием русского текста в опере. Теперь поддержка и ФФ.
  • Много словный поиск. Слова разделять пробелом.
  • Теперь не придётся опасаться что искомые слова в тегах будут заменены. Отнюдь нет.

    Недочёты:
  • Если в тексте имеется кусочек вида =abcd , при поиске abcd - строка обнаружена не будет.

    Методы борьбы:
    - Ставить пробел после символа равно (=)
    - Не ставить пробел после символа равно (=) в тегах. \n\n(Добавление)
    Ставить пробел после символа равно (=) "= abcd"
  • 6. UserID - 12 Апреля, 2007 - 15:45:50 - перейти к сообщению
    Неплохо было бы добавить заодно и скрол до места выделения. Может быть ситуация, когда контейнер имеет довольно внушительную высоту, либо если высота фиксированная, тогда внушетельную полосу прокрутки. Добавь чтоб ещё и скролило автоматом, будет вообще золото. И кстати, договоаривались все ещё комментарии писать, не все же так круто знаю жабаскрипт, как ты Улыбка
    7. valenok - 12 Апреля, 2007 - 15:48:11 - перейти к сообщению
    Дело в том что заметить выделение даже при экстра быстрой прокрутке труда составить не должно, а совпадений может быть несколько.
    Потому на мой взгляд он не нужен, хотя труда добавление такой возможности не составит.\n\n(Добавление)
    PHP:
    скопировать код в буфер обмена
    1.  
    2. function translate(str){
    3. // This function will be unneeded for Eng text
    4. //
    5.            // UTF - 8 Opera
    6.                 // Дело в том что когда в опере вводится Русский текст, она заменяется на utf-8 который скрипт не понимает. Декодируем
    7.                 // Whenever opera gets russian text in the adress bar, it encodes it into UTF-8. Decoding
    8.         str = str.replace(/%D0%[B9]0/gi,"а");
    9.         str = str.replace(/%D0%[B9]1/gi,"б");
    10.         str = str.replace(/%D0%[B9]2/gi,"в");
    11.         str = str.replace(/%D0%[B9]3/gi,"г");
    12.         str = str.replace(/%D0%[B9]4/gi,"д");
    13.         str = str.replace(/%D0%[B9]5/gi,"е");
    14.         str = str.replace(/%D(1%9|0%8)1/gi,"ё");
    15.         str = str.replace(/%D0%[B9]6/gi,"ж");
    16.         str = str.replace(/%D0%[B9]7/gi,"з");
    17.         str = str.replace(/%D0%[B9]8/gi,"и");
    18.         str = str.replace(/%D0%[B9]9/gi,"й");
    19.         str = str.replace(/%D0%[B9]A/gi,"к");
    20.         str = str.replace(/%D0%[B9]B/gi,"л");
    21.         str = str.replace(/%D0%[B9]C/gi,"м");
    22.         str = str.replace(/%D0%[B9]D/gi,"н");
    23.         str = str.replace(/%D0%[B9]E/gi,"о");
    24.         str = str.replace(/%D0%[B9]F/gi,"п");
    25.         str = str.replace(/%D(1%8|0%A)0/gi,"р");
    26.         str = str.replace(/%D(1%8|0%A)1/gi,"с");
    27.         str = str.replace(/%D(1%8|0%A)2/gi,"т");
    28.         str = str.replace(/%D(1%8|0%A)3/gi,"у");
    29.         str = str.replace(/%D(1%8|0%A)4/gi,"ф");
    30.         str = str.replace(/%D(1%8|0%A)5/gi,"х");
    31.         str = str.replace(/%D(1%8|0%A)6/gi,"ц");
    32.         str = str.replace(/%D(1%8|0%A)7/gi,"ч");
    33.         str = str.replace(/%D(1%8|0%A)8/gi,"ш");
    34.         str = str.replace(/%D(1%8|0%A)9/gi,"щ");
    35.         str = str.replace(/%D(1%8|0%A)C/gi,"ь");
    36.         str = str.replace(/%D(1%8|0%A)A/gi,"ъ");
    37.         str = str.replace(/%D(1%8|0%A)B/gi,"ы");
    38.         str = str.replace(/%D(1%8|0%A)D/gi,"э");
    39.         str = str.replace(/%D(1%8|0%A)E/gi,"ю");
    40.         str = str.replace(/%D(1%8|0%A)F/gi,"я");
    41.  
    42.                 // Unicode
    43.                 // The same as before but with Unicode (FireFoxs' encoding)
    44.         str = str.replace(/%[CE]0/gi,"а");
    45.         str = str.replace(/%[CE]1/gi,"б");
    46.         str = str.replace(/%[CE]2/gi,"в");
    47.         str = str.replace(/%[CE]3/gi,"г");
    48.         str = str.replace(/%[CE]4/gi,"д");
    49.         str = str.replace(/%[CE]5/gi,"е");
    50.         str = str.replace(/%[AB]8/gi,"ё");
    51.         str = str.replace(/%[CE]6/gi,"ж");
    52.         str = str.replace(/%[CE]7/gi,"з");
    53.         str = str.replace(/%[CE]8/gi,"и");
    54.         str = str.replace(/%[CE]9/gi,"й");
    55.         str = str.replace(/%[EC]A/gi,"к");
    56.         str = str.replace(/%[EC]B/gi,"л");
    57.         str = str.replace(/%[EC]C/gi,"м");
    58.         str = str.replace(/%[EC]D/gi,"н");
    59.         str = str.replace(/%[EC]E/gi,"о");
    60.         str = str.replace(/%[EC]F/gi,"п");
    61.         str = str.replace(/%[FD]0/gi,"р");
    62.         str = str.replace(/%[FD]1/gi,"с");
    63.         str = str.replace(/%[FD]2/gi,"т");
    64.         str = str.replace(/%[FD]3/gi,"у");
    65.         str = str.replace(/%[FD]4/gi,"ф");
    66.         str = str.replace(/%[FD]5/gi,"х");
    67.         str = str.replace(/%[FD]6/gi,"ц");
    68.         str = str.replace(/%[FD]7/gi,"ч");
    69.         str = str.replace(/%[FD]8/gi,"ш");
    70.         str = str.replace(/%[FD]9/gi,"щ");
    71.         str = str.replace(/%[FD]C/gi,"ь");
    72.         str = str.replace(/%[FD]A/gi,"ъ");
    73.         str = str.replace(/%[FD]B/gi,"ы");
    74.         str = str.replace(/%[FD]D/gi,"э");
    75.         str = str.replace(/%[FD]E/gi,"ю");
    76.         str = str.replace(/%[FD]F/gi,"я");
    77.  
    78. return(str); // --
    79. }
    80.  
    81.  
    82. function ampersand(str){  
    83.         // Splitting query & page adress
    84.         // Отделяем строку поиска от адресса страницы
    85.                 var str = str.split('search=');
    86.  
    87.                 // Deleting # symbol from search string
    88.                 // Убираем символ # из строки поиска
    89.                 if(str[1].indexOf('#')!=-1)             var str = str[1].substr(0,str[1].indexOf('#'));
    90.                 else                    var str=str[1];
    91.                        
    92. return(str);
    93. };
    94.  
    95.  
    96. function name_it(str){
    97.         // getting href name. ?search=252085031#ICQList -> ICQList
    98.         // Выделяем обращение, <a href=# name='top'></a> ?search=aaa#top
    99.         if(str.indexOf('#')!=-1){
    100.                 var name = str.substr(str.indexOf('#')+1);
    101.                 if(name.indexOf('#')!=-1) var name = name.substr(0,name.indexOf('#'));
    102.         };
    103. return(name);
    104. };
    105.  
    106.  
    107.  
    108.  
    109.  
    110. // Requested adress page.html?search=123#list
    111. // Определяем адресс
    112. var request = document.location.href;
    113.  
    114. // Checkin whether search needed to be performed
    115. // Проверяем задали ли строку поиска и нужно ли осуществлять поиск
    116. if(request.indexOf('search=')!=-1){
    117.  
    118.         // Проводим ряд преобразований на основе ф-ций выше
    119.         // Performing row of transformations based on functions below
    120.         var str = ampersand(request);
    121.         str = str.replace(/%20/gi," ");
    122.         if(request.indexOf('%')!=-1){var str = translate(str);}
    123.         if(request.indexOf('#')!=-1){var name = name_it(request);}
    124.         var str = str.replace(/(^ *)|( *$)/,""); // trim()
    125.        
    126.                
    127.         // Checking for searched words
    128.         // Определяем поисковые слова
    129.         words = str.split(" ");
    130.  
    131.         for(k=0;k<words.length;k++){
    132.                 str = words[k];
    133.        
    134.                 // Создаём реглярку
    135.                 // Creating regular expression
    136.                 var regexp = "\\("+str+"\\)";
    137.                 var patern =  new RegExp(regexp,"ig");
    138.        
    139.                 // Object = container where the search will be performed in. It could be even <body>. Check it has the id of 'page'
    140.                 // Контэйнер в котором будет производиться поиск. Это может быть и <body>? Убедитесь что оно имеет id='page'
    141.                 object = document.getElementById('page').innerHTML;
    142.  
    143.                 // Defending tags from beeing replaced
    144.                 // Поиск будет проводится только снаружи тегом
    145.                 pre_regexp = "\\(="+str+"\\)";
    146.                 pre_regexp =  new RegExp(pre_regexp,"ig");
    147.                 object = object.replace(pre_regexp,"=0-0");
    148.  
    149.                 pre_regexp = "\\(='"+str+"'\\)";
    150.                 pre_regexp =  new RegExp(pre_regexp,"ig");
    151.                 object = object.replace(pre_regexp,"=0-0");
    152.  
    153.                 pre_regexp = "\\(=\\""+str+"\\"\\)";
    154.                 pre_regexp =  new RegExp(pre_regexp,"ig");
    155.                 object = object.replace(pre_regexp,"=0-0");
    156.  
    157.                 // Осуществляем поиск
    158.                 // Searching
    159.                 // Remove <a href='#' name='foundation' class='found'> & </a> if you don't need an auto scroll to the location of the last match
    160.                 object = object.replace(patern, "<b style='background-color:#FFCC00;'><a href='#' name='foundation' class='found'>$1</a></b>");
    161.  
    162.                 // Restoring tags
    163.                 post_regexp = "\\(=0-0\\)";
    164.                 post_regexp =  new RegExp(post_regexp,"ig");
    165.                 object = object.replace(post_regexp,"='"+str+"'");
    166.  
    167.                 // Apply search to document
    168.                 document.getElementById('page').innerHTML = object;
    169.  
    170.                 // Go to line where word was found
    171.                 // Delete this part if you don't need an auto scroll to the location of the last match
    172.                 document.location = document.location.href + "#foundation";
    173.  
    174.         }
    175.  
    176. }
    177.  
    178.  


    Два слова:
    в тексте не должно быть последовательности символов =0-0
    в тексте после знака равно желательно ставить пробел
    в тегах не ставить пробел после знака равно у атрибутов.

    Удачи.
    8. Jakeryf - 12 Апреля, 2007 - 16:59:58 - перейти к сообщению
    Я вот такой скриптик использовал
    PHP:
    скопировать код в буфер обмена
    1.  
    2. <script>
    3. function getTextNodes(element) {
    4.  
    5.     array = new Array();
    6.  
    7.     for (var node = element.firstChild; node != null; node = node.nextSibling) {
    8.          if (node.nodeType == 3) {
    9.              array.push(node);
    10.          } else {
    11.              array = array.concat(getTextNodes(node));
    12.          }
    13.     }
    14.  
    15.     return array;
    16. }
    17.  
    18. function searchOnPage(input) {
    19.  
    20.     var text = input.value;
    21.  
    22.     window.searchingOnPage = true;
    23.     clearMatchesFound();
    24.  
    25.     document.body.normalize();
    26.  
    27.     var textNodes    = getTextNodes(document.body);
    28.     var matchId = 0;
    29.  
    30.     for (var i = 0; i < textNodes.length; i++) {
    31.  
    32.          if (textNodes[i].nodeValue.toLowerCase().indexOf(text.toLowerCase()) == -1) continue;
    33.  
    34.          var textNodeStart = document.createTextNode(textNodes[i].nodeValue.substr(0, textNodes[i].nodeValue.toLowerCase().indexOf(text.toLowerCase())));
    35.          var textNodeEnd   = document.createTextNode(textNodes[i].nodeValue.substr(textNodes[i].nodeValue.toLowerCase().indexOf(text.toLowerCase()) + text.length));
    36.          var span = document.createElement('SPAN');
    37.              span.style.background = '#F8ED93';
    38.              span.id = 'matchFound_' + matchId;
    39.              span.innerHTML = textNodes[i].nodeValue.substr(textNodes[i].nodeValue.toLowerCase().indexOf(text.toLowerCase()), text.length);
    40.  
    41.          textNodes[i].parentNode.insertBefore(textNodeStart, textNodes[i]);
    42.          textNodes[i].parentNode.insertBefore(span, textNodes[i]);
    43.          textNodes[i].parentNode.insertBefore(textNodeEnd, textNodes[i]);
    44.  
    45.          textNodes[i].parentNode.removeChild(textNodes[i]);
    46.  
    47.          matchId++;
    48.     }
    49.  
    50.     if (!matchId) {
    51.         input.className = 'invalid';
    52.     } else {
    53.         input.className = '';
    54.     }
    55. }
    56.  
    57. function clearMatchesFound() {
    58.  
    59.     var matchId = 0;
    60.     var span;
    61.  
    62.     while (document.getElementById('matchFound_' + matchId) != null) {
    63.  
    64.         span = document.getElementById('matchFound_' + matchId);
    65.  
    66.         span.parentNode.insertBefore(document.createTextNode(span.innerHTML), span);
    67.         span.parentNode.removeChild(span);
    68.  
    69.         matchId++
    70.     }
    71. }
    72.  
    73. </script>
    74.      <label for="searchOnPage">Найти на странице</label>
    75.     <input type="text" size="15" id="searchOnPage" onkeyup="searchOnPage(this);" />
    76.     <input type="button" value="искать" onclick="searchOnPage(document.getElementById('searchOnPage'));" />
    77.  

     

    Powered by ExBB FM 1.0 RC1