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

🎯 Задачи
В этом проекте вы научитесь:
- связывать событие
inputс полем ввода - реализовывать метод
handleInputдля фильтрации данных поиска - отображать результаты поиска в списке
🏆 Достижения
После завершения этого проекта вы сможете:
- использовать метод
addEventListenerдля связывания событий - использовать метод
filterдля фильтрации массива по условию - манипулировать DOM для обновления результатов поиска
Настройка структуры проекта
В этом шаге вы настроите файлы и структуру проекта. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте папку проекта. Структура каталогов следующая:
├── css
│ └── style.css
├── index.html
└── js
└── index.js
где:
index.html- главная страница.css- папка для хранения стилей проекта.js/index.js- JavaScript-файл, в котором необходимо добавить код.
Нажмите кнопку Go Live в нижнем правом углу WebIDE, чтобы запустить проект.
Далее откройте "Web 8080" в верхней части ВМ и обновите ее вручную, и вы увидите страницу.
Отобразить результаты поиска
В этом шаге вы реализуете метод render для отображения результатов поиска.
- В файле
js/index.jsнайдите методrenderв объектеsearch. - Внутри метода
renderдобавьте следующий код для генерации HTML-шаблона для результатов поиска и обновления элементаlistEl:
const template = this.data.reduce(
(prev, next) => prev + `<li>${next.content}</li>`,
""
);
this.listEl.innerHTML = template;
Метод reduce используется для создания строки HTML-шаблона, которая отображает свойство content каждого элемента в массиве data.
Реализовать метод handleInput
В этом шаге вы реализуете метод handleInput для обработки функциональности поиска.
- В файле
js/index.jsнайдите методhandleInputв объектеsearch. - Внутри метода
handleInputдобавьте следующий код для фильтрации массиваdataна основе значения ввода и последующего отображения результатов поиска:
const value = e.target.value;
// Используем таймер для имитации отправки запроса ajax, получения данных
setTimeout(() => {
this.data = !!value
? data.filter((val) => val.content.indexOf(value) !== -1)
: [];
this.render();
});
Функция setTimeout используется для имитации асинхронной операции, такой как запрос AJAX, для получения данных поиска.
Привязать событие ввода
В этом шаге вы научитесь связывать событие input с полем ввода и вызывать метод handleInput, когда значение в поле ввода меняется.
- Откройте файл
js/index.js. - Найдите функцию
handleв объектеsearch. - Внутри функции
handleдобавьте следующий код для связывания событияinputс элементомinputElи вызова методаhandleInput:
this.inputEl.addEventListener("input", this.handleInput.bind(this));
Часть bind(this) важна для обеспечения того, чтобы this внутри метода handleInput ссылалось на сам объект search.
После завершения этих четырех шагов в файле js/index.js должен быть полноценный имплементация функциональности поиска, и проект должен работать как ожидается. Финальный эффект должен быть следующим:

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



