Javascript пошук по сторінці

Javascript пошук по сторінці

Пошук по сторінці. може знадобитися для сторінок надають великий обсяг даних, включаючи таблиці і списки. Зауважу, що така потреба виникає в тому випадку, коли контент сторінки є статичним, і не генерується з бази даних.

Шукати на сторінці потрібну інформацію буде зручніше, якщо для цього реалізувати відповідний інтерфейс:

В поле потрібно ввести слово для пошуку і натиснути кнопку «Шукати», тут все інтуїтивно зрозуміло. Давайте перейдемо до реалізації самого механізму пошуку по сторінці і подивимося, які можуть бути нюанси при його реалізації.

Як шукати слово на сторінці?

if (obj) textToFind = TrimStr (obj.value); // обрізаємо прогалини
> Else alert ( "Введена фраза не знайдено");
return;
>
if (textToFind == "") alert ( "Ви нічого не ввели");
return;
>

if (document.body.innerHTML.indexOf (textToFind) == "- 1")
alert ( "Нічого не знайдено, перевірте правильність введення!");


товар вага вартість
Монітор 19 дюймів 1 кг 1900 руб.
монітор 18 дюймів 2 кг 1800 руб.
Монітор 20 дюймів 2 кг 1900 руб.

Спробуйте, протестувати пошуковими запитами «19», «2 кг» та іншими. Також раджу перевірити авто скролинг, для цього додайте текст до тих пір поки справа не відобразиться смуга прокрутки.

Ось так виглядає приклад використання скрипта:

Javascript пошук по сторінці

Javascript пошук по сторінці

Для Alexey.
Ой ....
Взагалі це повинен робити провідний топіка.Кратко не розповісти, треба відкривати «Тему». Якщо Марк відкриє цей топік- «Регулярні Вираз«, тоді по простіше буде. Ну, а на цей момент тільки по суті ...
Спробуємо розібрати дану тяганина ...
За шаблон взятий исходник Марка (трохи вище).

Необхідна наступна доробка:

Вхідні дані початок рядка input (для мене)
- будь-які символи. нуль
- латиницею. нуль
- вхідний слово не менше 2-3х знаків (по одному знаку: символу-букві-цифрі -не пропускаємо)

Маємо «исходник», писати новий. немає часу, лінь, «голова-дим».
Марк використовує метод replace.

Що про нього, replace - відомо?

А відомо то, що replace може заміняти входження регулярного вираження не тільки на рядок, а й на результат виконання функції. Його повний синтаксис, як приклад - такий:

var newString = str.replace (regexp / substr, newSubStr / function)

Ну і далі як - regexp Об'єкт RegExp. Його входження будуть замінені на значення, яке поверне параметр номер 2

Substr - Рядок, яка буде замінена на newSubStr.
newSubStr - Рядок, яка замінює підрядок з аргументу номер 1.
Function - функція, яка може бути викликана для генерації нової підрядка (щоб підставити її замість підрядка, отриманої з аргументу 1).

На жаль метод replace не змінює рядок, на якій викликаний, а просто повертає нову, змінену рядок.
Щоб здійснити глобальну заміну, необхідно включити в регулярний вираз прапор «g«.
Якщо перший аргумент - рядок, то вона не перетвориться в регулярний вираз, так що, наприклад,

var ab = "a b" .replace ( "\\ s", "..") // = "a b"

Виклик replace залишив рядок без зміни, т.к шукати не регулярний вираз \ s. а рядок «\ s«.
Тепер необхідно розуміти що:
\ - Для звичайних символів - робить їх спеціальними. Наприклад, вираз / s / шукає просто символ 's'. А якщо поставити \ перед s. то / \ s / вже позначає символ пробілу. І навпаки, якщо символ спеціальний, наприклад *. то \ зробить його просто звичайним символом «зірочка». Наприклад, / a * / шукає 0 або більше поспіль символів 'a'. Щоб знайти а із зірочкою 'a *' - поставимо \ перед спец. символом: / a \ * /.
А так само необхідно розуміти і це:
- коли регулярний вираз створюється за допомогою конструктора new RegExp (...). необхідно пам'ятати, що зворотні слеші (\) повинні екрануватися, напр .:

Отже, використовував код, допрацював що б не глючить при введенні 1-2 символів або цифр, допрацював, що б надійно переходив до першого знайденого входження тексту.

Але тепер з'ясувалося, що пошук і заміна відбувається по всьому тексту сторінки і по атрибутам HTML тегів.

...... Якщо вам дійсно потрібна консультація з таких питань - звертайтеся до професіоналів, наприклад, в «» Австрію-Хоум ».. Консультувалися ......

при пошуку по слову austria пошкоджується.

Як налаштувати пошук і заміну тільки в видимому тексті,
як це робить справжня кнопка f3?

І ще, а як знайти наступний примірник?

//////////////////////////////////////// search
function searchGlobalText (ob, textToFind) for (var i = 0; i // тут можна звертати до parentNode:
/ * Var rng = document.createRange ();
rng.selectNode (ob.childNodes [i]);
rng.deleteContents (); * /

> Else searchGlobalText (ob.childNodes [i], textToFind);
>;
> Else if (ob.childNodes [i] .nodeType == 3) if (eval ( "/" + textToFind + "/ gi"). Test (ob.childNodes [i] .nodeValue)) var root = ob.childNodes [ i];
var content = root.nodeValue;

if (document.createRange) var rng = document.createRange ();
rng.setStart (root, content.toLowerCase (). indexOf (textToFind.toLowerCase ()));
rng.setEnd (root, content.toLowerCase (). indexOf (textToFind.toLowerCase ()) + textToFind.length);
var highlightDiv = document.createElement ( 'a');
highlightDiv.setAttribute ( 'name', textToFind);
highlightDiv.setAttribute ( 'srh', '');
highlightDiv.style.backgroundColor = 'red';

rng.surroundContents (highlightDiv);
break;
> else

var rng = document.body.createTextRange ();

rng.moveToElementText (root);
// Знайдемо текст і звернемо діапазон до нього
if (rng.findText (textToFind))

rng.pasteHTML ( ''+ TextToFind +'');
break;
>


>
>
function enterSearch () if (event.keyCode == 13) FindOnPage ( 'text-to-find');
>
>
function FindOnPage (inputId)

var textToFind = document.getElementById (inputId) .value;

Добрий день, спасибі за код.
Допоможіть розібратися, в чому може бути проблема, у всіх браузерах пошук нормально працює, але в IE 8 версії не зовсім коректно: шукану фразу знаходить, фокусується, але в поле введення тексту відображається « Допоможіть розібратися, що за містика?)) Заранее спасибо.

Добрий всім день! Підкажіть будь ласка, чому у мене по даному коду шукає тільки 1 слово, тобто якщо вводиш фразу, навіть з 2-х слів, пошук не відбувається. І ще, як перетворити цей код, щоб все пропозиції з знайденим текстом з'являвся в окремому вікні? Допоможіть будь ласка, а то текст дуже величезний, навіть прокрутка не допомагає.

Схожі статті