Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2020, 21:31
MOT MOT вне форума
Аспирант
Отправить личное сообщение для MOT Посмотреть профиль Найти все сообщения от MOT
 
Регистрация: 30.08.2019
Сообщений: 52

Поиск по сайтАМ
Доброго времени суток!
Есть скриптик для поиска по сайту:
<style>
@keyframes background {
0% {
background: red;
}
49% {
background: red;
}
50% {
background: yellow;
}
100% {
background: yellow;
}
}
</style>
<script type="text/javascript">
    var lastResFind=""; // последний удачный результат
    var copy_page=""; // копия страницы в ихсодном виде
    function TrimStr(s) {
         s = s.replace( /^\s+/g, '');
      return s.replace( /\s+$/g, '');
    }
    function FindOnPage(inputId) {//ищет текст на странице, в параметр передается ID поля для ввода
      var obj = window.document.getElementById(inputId);
      var textToFind;
     
      if (obj) {
        textToFind = TrimStr(obj.value);//обрезаем пробелы
      } else {
        alert("Введенная фраза не найдена");
        return;
      }
      if (textToFind == "") {
        alert("Вы ничего не ввели");
        return;
      }
     
      if(document.body.innerHTML.indexOf(textToFind)=="-1")
      alert("Ничего не найдено, проверьте правильность ввода!");
     
      if(copy_page.length>0)
            document.body.innerHTML=copy_page;
      else copy_page=document.body.innerHTML;
    
     
      document.body.innerHTML = document.body.innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола
      document.body.innerHTML = document.body.innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='animation: background 1s linear infinite;'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем;
      lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки
      window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению
     }
    </script>
    <body>
    <input type="text" id="text-to-find" value="">
    <input type="button" onclick="javascript: FindOnPage('text-to-find'); return false;" value="Искать"/>
    <br/><i>Введите слово или фразу для поиска.</i>
    <hr/>
<span>А</span><br>
<span>Б</span><br>
<span>В</span><br>
<span>контент</span>
</body>

Вся проблема в том, что идёт поиск только на сайте где я нахожусь. Как сделать нормальный поиск по системе сайтов не используя БД и страшный php?
P.S.Интересный баг - при вводе точки в поиск дизайн сайта ломается и выводятся точки

Последний раз редактировалось MOT, 03.04.2020 в 22:25.
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2020, 08:35
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,702

Ну багов тут хватает не только с точкой.
Попробуйте искать латинскую букву a ))

А причина в том, что вы ищите в innerHTML, а потом его и меняете. В innerHTML попадает все, включая теги <span> в которых находится 'а', и потом заменяется.

Искать нужно в textContent каждого элемента по отдельности.
И вставку <a name...>
делать не текстовой заменой а созданием элемента

let a= document.createElement('a')
a.name='...'
parent.insertBefore(a, searchelem)

Как то так вот

Вот этот кошмар
.replace(eval("/name="+lastResFind+"/gi"),....
Надо заменить на
.replace(new RegExp("name="+lastResFind, "gi"),....
Ответить с цитированием
  #3 (permalink)  
Старый 04.04.2020, 20:31
MOT MOT вне форума
Аспирант
Отправить личное сообщение для MOT Посмотреть профиль Найти все сообщения от MOT
 
Регистрация: 30.08.2019
Сообщений: 52

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать поиск со стороннего сайта kozlik Работа 1 19.09.2014 12:23
Живой поиск JQUERY + AJAX + PHP + MYSQL dimi007 AJAX и COMET 2 22.07.2014 13:50
select отключить встроенный поиск skynet-mfd jQuery 0 04.03.2013 11:26
Поиск в тексте javascript jQuery 3 31.05.2011 11:40
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31