Wyszukiwanie JavaScript według tagu. Organizowanie wyszukiwania na stronie internetowej w JavaScript (bez jQuery)

Dom / Awarie

Kilka dni temu otrzymałem od firmy zadanie testowe na stanowisko Front-end Developer. Oczywiście zadanie składało się z kilku punktów. Ale teraz porozmawiamy tylko o jednym z nich - organizowaniu wyszukiwania stron. Te. banalne wyszukiwanie po tekście wpisanym w pole (analogicznie do Ctrl+F w przeglądarce). Specyfika zadania polegała na tym, że korzystanie z jakichkolwiek frameworków lub bibliotek JS było zabronione. Wszystko jest napisane w natywnym JavaScript.

Szukanie gotowego rozwiązania. Pierwsza myśl: ktoś już dokładnie to napisał, trzeba wpisać w google i skopiować i wkleić. Tak zrobiłem. W ciągu godziny znalazłem dwa dobre scenariusze, które zasadniczo działały w ten sam sposób, ale zostały napisane inaczej. Wybrałem ten, którego kod zrozumiałem lepiej i wkleiłem go na swoją stronę główną.

Jeśli ktoś jest zainteresowany to wziąłem kod.

Skrypt zadziałał natychmiast. Myślałem, że problem został rozwiązany, ale jak się okazało, bez urazy dla autora scenariusza, był w nim ogromny błąd. Skrypt przeszukał całą zawartość tagu... i jak się zapewne domyślasz, przy wyszukiwaniu dowolnej kombinacji znaków przypominających tag lub jego atrybuty, cała strona HTML pękała.

Dlaczego skrypt nie zadziałał poprawnie? To proste. Skrypt działa w następujący sposób. Najpierw zapisujemy całą zawartość tagu body do zmiennej, następnie szukamy dopasowań za pomocą wyrażenia regularnego (ustawianego przez użytkownika przy wejściu w pole tekstowe), a następnie wszystkie dopasowania zastępujemy następującym kodem:

...znaleziono dopasowanie...
A następnie zastępujemy bieżący znacznik treści otrzymanym nowym. Znacznik zostanie zaktualizowany, style się zmienią, a wszystkie znalezione wyniki zostaną podświetlone na ekranie na żółto.

Prawdopodobnie już zrozumiałeś, na czym polega problem, ale nadal wyjaśnię bardziej szczegółowo. Wyobraź sobie, że wpisałeś słowo „div” w polu wyszukiwania. Jak możesz sobie wyobrazić, wewnątrz body znajduje się wiele innych tagów, w tym div. A jeśli do wszystkich „divów” zastosujemy wskazane powyżej style, to nie będzie to już blok, ale coś niezrozumiałego, ponieważ projekt się psuje. W rezultacie po przepisaniu znaczników otrzymamy całkowicie zepsutą stronę internetową. Wygląda to tak.

Jak widać, strona jest całkowicie uszkodzona. Krótko mówiąc, skrypt okazał się niedziałający i postanowiłem napisać własny od podstaw, czemu poświęcony jest ten artykuł.

Zatem piszemy scenariusz od zera. U mnie wszystko wygląda tak.

Teraz interesuje nas formularz wyszukiwania. Otoczyłem go czerwoną linią.

Rozwiążmy to trochę. Zaimplementowałem to w następujący sposób (na razie czysty HTML). Formularz z trzema tagami.

Pierwsza służy do wprowadzania tekstu;
Drugi służy do anulowania wyszukiwania (odznacz);
Trzeci służy do wyszukiwania (podkreśl znalezione wyniki).


Mamy więc pole wejściowe i 2 przyciski. Napiszę JavaScript w pliku js.js. Załóżmy, że już go utworzyłeś i podłączyłeś.

Pierwszą rzeczą, którą zrobimy, będzie zapisanie wywołań funkcji po kliknięciu przycisku wyszukiwania i przycisku anulowania. Będzie to wyglądać tak:


Pozwólcie, że wyjaśnię trochę, co tu jest i dlaczego jest potrzebne.

Dla pola tekstowego podajemy id="text-to-find" ( używając tego identyfikatora, uzyskamy dostęp do elementu z js).

Przyciskowi anulowania nadajemy następujące atrybuty: type="button" onclick="javascript: FindOnPage("text-to-find",false); zwróć fałsz;”

- Typ: przycisk
- Po kliknięciu wywoływana jest funkcja FindOnPage("tekst do znalezienia",false). i przekazuje identyfikator pola tekstowego, false

Przyciskowi wyszukiwania nadajemy następujące atrybuty: type="button" onclick="javascript: FindOnPage("text-to-find",true); zwróć fałsz;”

- Typ: wyślij (nie przycisk, bo tutaj po wejściu w pole możesz użyć Enter, ale możesz też użyć przycisku)
- Po kliknięciu wywoływana jest funkcja FindOnPage("tekst do znalezienia",true). i przekazuje identyfikator pola tekstowego, true

Prawdopodobnie zauważyłeś jeszcze jedną cechę: prawda/fałsz. Wykorzystamy ją do ustalenia, który przycisk został kliknięty (anuluj wyszukiwanie lub rozpocznij wyszukiwanie). Jeśli klikniemy Anuluj, przekazujemy false . Jeśli klikniemy Szukaj, przekazujemy true .

Zanim zaczniemy pisać kod, cofnijmy się o krok i najpierw omówmy, jak wszystko powinno działać. Te. Krótko mówiąc, napiszemy plan działania. Potrzebujemy więc strony, która będzie przeszukiwana podczas wpisywania tekstu w polu, ale nie można dotykać tagów i atrybutów. Te. tylko obiekty tekstowe. Jak to osiągnąć – na pewno jest wiele sposobów. Ale teraz użyjemy wyrażeń regularnych.

Zatem poniższe wyrażenie regularne będzie wyszukiwać tylko następujący tekst. np.: ">… tekst...(.*?)(.*?)(.*?)

© 2024 ermake.ru - O naprawie komputerów PC - Portal informacyjny