Поиск слова на странице (javascript)
Добрый день. Искала в интернете много примеров поиска слова по странице. Примеров мягко сказать не так уж и много..несколько из которых вообще не работоспособные.
Данный скрипт оказался рабочим. И я даже разобралась в нем. Однако хотела бы спросить как сделать чтобы допустим после совершения поиска если пользователь нажимал на кнопку мыши то все выделения исчезали? И второй моментик как сделать переход по выделенным словам кнопками? <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 (textToFind.length < 2) { alert("Слишком короткий текст") return; } 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='background:yellow; font-size:15px'>" + textToFind + "</a>"); //Заменяем найденный текст ссылками с якорем; lastResFind = textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки window.location = '#' + textToFind;//перемещаем скрол к последнему найденному совпадению } </script> |
для поля ввода
<input type="text" id="text-to-find" value=""> <input type="button" onclick="javascript: FindOnPage('text-to-find'); return false;" value="Искать"/> |
|
В том что Вы прислали не реализовано то что как раз я не могу найти как сделать..перехода по вхождениям нет...и выделения не убираются если не перегрузить страницу(((
|
Корделия,
выделения убираются без всякой перезагрузки достаточно убрать шаблон поиска - в остальном Вы просите готовый скрипт с нуля. Это работа, и за нее обычно платят деньги. Для таких сообщений предназначен раздел форума "Работа". Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела. |
Это не работа с нуля потому что явно здесь просто добавляется пара строк. А так как я человек, который впервые вообще с подобным столкнулся я не могу сообразить что это за пара строк, иначе тут бы и не писала. Не могли бы вы пояснить, что значит убрать шаблон поиска?
|
Вот, за полчаса тут написал, возиться долго не хочу, поэтому улучшайте сами.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <title>Документ без названия</title> <style type="text/css"> .wordSelected { background: #066; border: 1px solid #F30; color: #FFF; } .wordFocused { background: #FFF; } </style> </head> <body> <div id="myText">«Меня зашвыривают внутрь. Успеваю увидеть стол, на котором лежит здоровенный продолговатый пакет на застежке – старший вожатый тут же его загораживает, кучу инструментов, нашего доктора с лицом таким усталым и брезгливым, что молодость ему не идет, и раму с дверной ручкой на окне».<br /> «Меня зашвыривают внутрь. Успеваю увидеть стол, на котором лежит здоровенный продолговатый пакет на застежке – старший вожатый тут же его загораживает, кучу инструментов, нашего доктора с лицом таким усталым и брезгливым, что молодость ему не идет, и раму с дверной ручкой на окне».</div> <input type="button" onclick="Word.selected('стол', 'myText')" value="Найти 'стол'" /> <input type="button" onclick="Word.deleted()" value="Удалить выделения" /> <input type="button" onclick="Word.focused()" value="Focus +" /> <script type="text/javascript"> var Word = { selected: function(word, where, del) { where = typeof where == 'string' ? document.getElementById(where) : where || console.log('Error'); if(!where) return; where.innerHTML = ' '+where.innerHTML.replace(new RegExp('[^a-zа-яё_-]' + word + '[^a-zа-яё_-]', 'gim'), '<span class="wordSelected">' + ' ' + word + ' ' + '</span>'); }, deleted: function() { var elems = document.getElementsByClassName('wordSelected'); for(var i=elems.length-1; i>=0; i--) elems[i].outerHTML = ' '+elems[i].innerHTML+' '; }, focused: function() { var elems = document.getElementsByClassName('wordSelected'); if(!elems[0]) return; if(elems[this.focusIndex]) elems[this.focusIndex].classList.remove('wordFocused'); if(elems[++this.focusIndex]) elems[this.focusIndex].classList.add('wordFocused'); else { this.focusIndex = -1; this.focused(); } }, focusIndex: -1 } </script> </body> </html> |
Спасибо огромное приогромное))буду разбиратся
|
Ruslan_xDD,
а run в тег html ? а множественное выделение выделение одного и тогоже?а белое на белом ? |
рони, это так, наброски. Дорабатывать конечно много чего нужно. Насчёт HTML Run, то он у меня никогда не срабатывает, попросту вся страница перестаёт работать, поэтому я им не пользуюсь.
|
Часовой пояс GMT +3, время: 23:56. |