Как сделать фильтрацию по категориям?

Для реализации фильтрации по категориям в реализации JavaScript у нас есть несколько подходов. Ниже я предлагаю два варианта решения данной задачи.

1. Использование DOM-манипуляций:
- В HTML создаем список категорий с помощью тега <select>. Каждая категория будет иметь свое значение (value).
- Создаем список элементов, которые мы хотим фильтровать. Каждому элементу добавляем класс, соответствующий одной из категорий.
- Создаем функцию, которая будет вызываться при изменении значения в списке категорий.
- В функции получаем выбранное значение категории, перебираем все элементы и сравниваем их классы с выбранной категорией.
- Если класс элемента соответствует выбранной категории, то оставляем элемент видимым. В противном случае скрываем элемент с помощью свойства 'display: none'.

Пример кода:

   <select id="category-filter">
     <option value="all">Все</option>
     <option value="category1">Категория 1</option>
     <option value="category2">Категория 2</option>
     <option value="category3">Категория 3</option>
   </select>

   <div class="item category1">Элемент 1</div>
   <div class="item category2">Элемент 2</div>
   <div class="item category1">Элемент 3</div>
   <div class="item category3">Элемент 4</div>

   <script>
     var filterSelect = document.getElementById('category-filter');
     var items = document.getElementsByClassName('item');

     filterSelect.addEventListener('change', function() {
       var selectedCategory = filterSelect.value;

       for (var i = 0; i < items.length; i++) {
         if (selectedCategory === 'all' || items[i].classList.contains(selectedCategory)) {
           items[i].style.display = 'block';
         } else {
           items[i].style.display = 'none';
         }
       }
     });
   </script>

2. Использование фреймворка или библиотеки:
Если у вас используется фреймворк или библиотека, такая как React, Vue или Angular, вы можете воспользоваться их функциональностью для реализации фильтрации по категориям. Наиболее распространенным подходом является использование виртуального DOM и реактивных свойств.

Пример кода с использованием React:

   import React, { useState } from 'react';

   function App() {
     const [selectedCategory, setSelectedCategory] = useState('all');

     const handleCategoryChange = (event) => {
       setSelectedCategory(event.target.value);
     };

     return (
       <div>
         <select value={selectedCategory} onChange={handleCategoryChange}>
           <option value="all">Все</option>
           <option value="category1">Категория 1</option>
           <option value="category2">Категория 2</option>
           <option value="category3">Категория 3</option>
         </select>

         <div className="item category1">Элемент 1</div>
         <div className="item category2">Элемент 2</div>
         <div className="item category1">Элемент 3</div>
         <div className="item category3">Элемент 4</div>
       </div>
     );
   }

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

Оба варианта решения могут быть адаптированы под ваши конкретные потребности и используемую архитектуру вашего приложения.