Подсветка найденного при поиске

Поиск и подсветка текста на странице (JavaScript — jQuery)

Нужен был поиск на страничке, точнее в тексте, не серверный, а обычный. То есть — загрузил страничку где много текста, читаешь, и при надобности ищешь. Порылся в интернете и, к сожалению, готово варианта (с переходом между словами и прокруткой странички) не нашел, хотя в реализации нету ничего сложного — или плохо искал, или никому не надо было.
Вот как раз заканчиваю — решил поделиться первым вариантом.

Само собой используется библиотека jQuery.
За основу я взял статейку jQuery – подсветка слов в тексте или HTML отсюда (их пример). Как подключить к страничке скрипт там описано.

буду использовать ниже «слово» = «словосочетание» = «словосочетание букв и\или символов».

Теперь начнем расширять функционал:

кнопки поиска, выделение следующего слова и предыдущего, и скролл странички к выделенному слову

1) делаем подсветку конкретного слова
в файл jquery.highlight.js добавляем

2) в стиль прописываем отображение выделяемого слова и меняем стиль подсветки для себя

3)Создаем кнопки и поле ввода

4)приписываем кнопкам действия
копируем код:

(ниже опишу для чего эта функция)

5)
function scroll_to_word() <. >— функция скрола (перемотки) странички к нужному нам слову
ну вообще делается очень легко с помощью простого плагина jqueryscrollto, который берем отсюда, и ищем по классу .highlight и номером eq(‘+search_number +’) ( search_number — смотрим в список глобальных переменных скрипта).

Но мне пришлось использовать этот набор плагинов (jqwidgets), так как был нужен собственный скрол для странички а не браузерный, поэтому я воспользовался их API:
scrollTo Method
Scroll to specific position.
Code examples
Invoke the scrollTo method.

Demo
Вот походу и все.
Прошу прощения за неоптимизированный код — вот только что закончил и решил поделится, это только начальная версия

Источник

Мгновенный поиск, подсветка, переход к найденному

Новичок. Ищу скрипты приспосабливаю под свои нужды. Помогите с простой задачей в оформлении html одной вебстранички и адаптировании скрипта, использующего jquery. Не пугайтесь что написал текста много, задача для профи — простая, для меня огромная помощь. Спасибо!

Задача: создать мгновенный поиск и подсветку найденного для больших веб-страниц, расположенных на локальном компьютере, замена CTRL+F:

1. Скрипты только JavaScript, текст скриптов вынести в отдельный файл js, работать скрипты должны в любом браузере (желательно включая браузеры на/для Android)
2. Страница должна иметь 2 блока: блок один, узкий с 2мя контролами (см. ниже), висящий все время вверху в топ страницы, поверх, не изменяющий позиции при скроллинге, блок два — с основным текстом страницы, где будет производится поиск
3. Дано: Основной текст страницы сверстан одинаковыми divами

4. Блок 1 содержит 2 контрола: текстовое поле #q и checkbox #q1, используемый для переключения режимов поиска True = режим 1, False = режим 2
5. Текст введенный в блок 1 должен подсвечиваться на вебстранице, не чувствительно к регистру, не зависит вначале/в середине слова, все вхождения
6. Режим 1 — если текст найден — перейти (scroll страницы) к первому вхождению, если текст не найден/ничего не введено — перейти (скролл) в начало страницы
7. Режим 2 — если текст найден в элементе search_item — показать этот div-элемент, не найден — скрыть этот div-элемент, если ничего не введено — показать всю страницу
8. Скрипт(ы) мгновенного поиска запускаются вводом символов в текстовом поле 1 (н-р отслеживаем нажатия, keyup), а также снятием|установкой checkbox 1, т.е. последнее также должно подсвечивать/переходить/скрывать-показывать текущий текст в текстовое поле #q

Все запчасти для будущей веб-страницы нашел в инете, помогите это подчистить, собрать в кучу

Источник

Подсветка найденного при поиске

Подсветка результатов поиска на странице

  1. Для поиска и просмотра a href = «/search» title = «Результаты поиска» > результатов
  2. поиска a > пройдите по поисковой ссылке .
  1. Для b > поиск b > а и просмотра a href = «/search» title = «Результаты поиска» >
  2. результатов b > поиск b > а a > пройдите по b > поиск b > овой ссылке .
  1. // Искомая строка для подсветки на странице
  2. $search = ‘html’ ;
  3. // Создаем строку для регулярного выражения
  4. $pattern = «/((?:^|>)[^ . $search . «)/si» ;
  5. // Подсвеченная строка
  6. $replace = ‘$1 $2‘ ;
  7. // Заменяем
  8. $html = preg_replace ( $pattern , $replace , $html );
Читайте так же:  Philips 32pft4309 60 уменьшить ток подсветки

Код также немного упрощен для удобства восприятия. В реальных проектах при составлении регулярного выражения $pattern надо обязательно экранировать в искомой строке все служебные символы, которые могут быть использованы в регулярных выражениях.

Протестируем скрипт. Для примера возьмем небольшую html-страницу с текстом и html-тегами и попробуем подсветить на ней все вхождения слова «html». Обратите внимание, что эта строка встречается не только в тексте, но и в самой разметке страницы, в адресе ссылки, а также в атрибуте title.

  1. html >
  2. head > title > Тестовая страница title > head >
  3. body >
  4. HTML ( от англ . HyperText Markup Language — язык разметки гипертекста ) —
  5. стандартный язык разметки документов во Всемирной паутине . Большинство
  6. веб — страниц создаются при помощи
  7. a href = «http://ru.wikipedia.org/wiki/HTML» title = «Описание языка HTML» > языка
  8. HTML a > ( или XHTML ).
  9. body >
  10. html >

Вот что у нас получилось после замены. Выглядит очень даже неплохо.

Теперь посмотрим на исходный код, не поломалось ли чего. Нет, и тут все в порядке. Подсвечен только текст вне тегов, внутри тегов он остался без изменения.

Если используется релевантный поиск, то регулярное выражение для подсветки можно доработать таким образом, чтобы подсвечивались несколько слов по отдельности и вся поисковая фраза целиком. Это вы можете сделать самостоятельно.

Комментарии

Здорово, спасибо! Работает на ура!

Поделюсь, как видоизменил, чтобы можно было выделять несколько слов и выделялось css-классами:

$html_lit = ‘ Text of html page to replace with color lighting. Used html tags «span» and «class» defined. ‘;
$words_and_classes = array ();
$words_and_classes[] = array ( ‘word’ => ‘html’, ‘class’ => ‘light_1’);
$words_and_classes[] = array ( ‘word’ => ‘with color’, ‘class’ => ‘light_2’);

foreach ($words_and_classes as $one) <
$regs_search = ‘/’.preg_quote($one[‘word’], ‘/’).’/usi’;
$regs_replace = ‘ \\0 ‘;

$html=preg_replace_callback(‘/(? )([^<>]+)(?=$| This is for REPLACE
При замене REPLACE — все ок
Но есть в строке несколько вхождений заменяемой фразы, то заменяется только ПОСЛЕДНЯЯ:
REPLACE examle — this is for REPLACE

в этом примере заменится только последний REPLACE, а первый останется незамеченным :((

В какую сторону regexp-правил можно смотреть, чтобы учесть ВСЕ вхождения??

Источник

Подсветка результатов поиска, без использования плагинов

Существует не мало плагинов для улучшения поиска в WordPress. Есть такие, которые изменяют алгоритм поиска, а есть которые делают поиск удобнее. В этой заметке речь пойдет именно о таком плагине. Я хочу совсем немного улучшить стандартный поиск WordPress: сделать подсветку искомых слов.

Задача: сделать подсветку результатов поиска, без использования плагинов. Решается ниже представленным способом, а точнее функцией, которая по сути аналогична, пожалуй, самому простому плагину для подсветки результатов поиска в WordPress — Search Hilite (подсвечиваются слова и больше никаких действий).

Поместите код в файл шаблона functions.php .

Функция будет работать, если в файле search.php у вас для вывода результатов поиска используется функция the_excerpt() или the_content() . Если вывод осуществляется нестандартно, читайте ниже.

В самом начале кода можно настроить стили найденных слов: $st1 — первое слово, $st2 — второе и т.д.

По умолчанию цвета такие: Подсвечиваем результаты поиска , без плагинов.

Код лучше добавлять в сам файл поиска, непосредственно перед контентом, потому что если его добавить в functions.php, то из-за хука:

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

Подсветка чего угодно

Если для вывода поиска используются функции отличные от the_excerpt() или the_content(), то чтобы подсветка работала, нужно «прогнать» выводимый текст через эту функцию.

Допустим, вы используете для вывода результатов поиска функцию get_my_excerpt() , тогда, чтобы подсветка работала вывод нужно будет записать подобным образом:

Обновления

29.04.2010
Спасибо Ю.Б. за подсказку (в комментариях) использовать модификатор u для регулярного выражения — код значительно сократился.

Были непонятные баги с подсветкой — не все слова подсвечивались. Как выяснилось проблема была в регулярном выражении я ее упростил, теперь подсвечивается все.

  • Теперь подсветка регистронезависима для кириллицы, т.е. если в поиске задано например, слово «поиск«, то подставятся слова: «Поиск», «поиск» или «ПОИСК». Эта проблема существует и в плагине Search Hilite. Давно хотел поправить этот баг — пришлось попотеть, пока понял где собака зарыта.
  • Источник

    Форум

    Discord чат

    Новичок. Ищу скрипты приспосабливаю под свои нужды. Помогите с простой задачей в оформлении html одной вебстранички и адаптировании скрипта, использующего jquery. Не пугайтесь что написал текста много, задача для профи — простая, для меня огромная помощь. Спасибо!

    Задача: создать мгновенный поиск и подсветку найденного для больших веб-страниц, расположенных на локальном компьютере, замена CTRL+F:

    1. Скрипты только JavaScript, текст скриптов вынести в отдельный файл js, работать скрипты должны в любом браузере (желательно включая браузеры на/для Android)
    2. Страница должна иметь 2 блока: блок один, узкий с 2мя контролами (см. ниже), висящий все время вверху в топ страницы, поверх, не изменяющий позиции при скроллинге, блок два — с основным текстом страницы, где будет производится поиск
    3. Дано: Основной текст страницы сверстан одинаковыми divами

    4. Блок 1 содержит 2 контрола: текстовое поле #q и checkbox #q1, используемый для переключения режимов поиска True = режим 1, False = режим 2
    5. Текст введенный в блок 1 должен подсвечиваться на вебстранице, не чувствительно к регистру, не зависит вначале/в середине слова, все вхождения
    6. Режим 1 — если текст найден — перейти (scroll страницы) к первому вхождению, если текст не найден/ничего не введено — перейти (скролл) в начало страницы
    7. Режим 2 — если текст найден в элементе search_item — показать этот div-элемент, не найден — скрыть этот div-элемент, если ничего не введено — показать всю страницу
    8. Скрипт(ы) мгновенного поиска запускаются вводом символов в текстовом поле 1 (н-р отслеживаем нажатия, keyup), а также снятием|установкой checkbox 1, т.е. последнее также должно подсвечивать/переходить/скрывать-показывать текущий текст в текстовое поле #q

    Все запчасти для будущей веб-страницы нашел в инете, помогите это подчистить, собрать в кучу

    Источник

    Подсветка текста, основанная на вводимом слове, ведет себя неожиданно

    Это форматирование текста перед введением поискового запроса.

    После ввода термина он теряет исходный формат (возвращает обычный текст) и дублирует текст p на количество найденных последовательных символов (на самом деле я знаю, почему это так, но опять же не знаю, как этого избежать):

    Я хочу сохранить исходный формат HTML с выделенными словами и, конечно же, чтобы избежать дублирования текста.

    2 ответа

    Когда вы вызываете функцию searchHighlight , вы получаете содержимое p , которое даст вам все p . Кроме того, когда вы говорите .text() , вы получите простой текст. Вот почему это было удаление исходного формата.

    Если вы запустите цикл для всех p и используете .html() вместо .text() , а также если вы развернете выделенный контент при запуске перед получением html-контента, вы сможете этого добиться.

    Там всегда будут некоторые лазейки.

    Легко выделять с помощью mark.js .

    Знакомство с mark.js

    mark.js — подсветка текста, написанная на JavaScript. Он может использоваться для динамической маркировки поисковых терминов или пользовательских регулярных выражений и предлагает вам встроенные опции, такие как поддержка диакритических знаков, отдельный поиск слов, пользовательские синонимы, поддержка iframes, пользовательские фильтры, определение точности, пользовательский элемент, имя пользовательского класса и многое другое.

    Посмотрите, как просто, вам не нужно больше десяти строк , фреймворк готов и сделает все за вас, с возможностью настройки вашего кода, просто зайдите на официальную страницу и посмотрите документацию и примеры , Вероятность неудач намного ниже, и вы уже делаете это правильно с первого раза. Просто установите зависимости и используйте их легко.

    Почему использование функции самодельного выделения — плохая идея :

    Источник

    подсветка найденных слов — Yandex — Обсуждение 2290852

    «Подсветка» слов в выдаче
    В общем тема такая Ограничиваю область поиска определенным сайтом — делаю запрос из двух СЧ.

    Подсветка всех найденных совпадений в TextBox
    Доброго всем времени суток! Такой вопрос, есть 2 textbox, необходима подсветка слов, которые.

    Поиск слов по букве, и выделение найденных слов
    Задача такая, есть список из 1 млн слов. Необходимо найти все слова, которые содержат букву «а».

    Количество найденных слов
    Как вывести в MsgBox количество найденных слов. Private Sub CommandButton1_Click() .

    Удаление найденных слов в тексте
    Дан текст удалить из текста стоп слова.. Как сделать кто подскажет? Моя идея. Забить стоп.

    Запись найденных слов в файл
    Всем доброго времени суток. Есть файл, в нем записаны слова true и false построчно в случайном.

    Поиск по тексту и отметка найденных слов
    Нужно сделать поиск по тексту с отметкой всех найденных слов. Проблема в том, что отмечается первое.

    Выделить абзац с наибольшим количеством найденных слов
    Эта программа позволяет по нажатию на CommandButton1 найти в документе Word заданное слово и.

    Источник

    Оцените статью
    Охраны в доме нет
    Adblock
    detector