@calamandor

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

Хочу сделать фильтрацию по категориям, по отдельности работает как надо, но если совмещать разные категории, то высший приоритет будет у последней нажатой категории, как это исправить
<nav1>
                            <ul id="list1">
                                <li><span class="category-btn a" data-category="sanatoriums"></span>Санатории</li>
                                <li><span class="category-btn a" data-category="guest"></span>Гостевые дома</li>
                                <li><span class="category-btn a" data-category="hostels"></span>Хостелы</li>
                            </ul>
</nav1>
                   
                    <li><span class="text2"><img src="caret.png" id="caret_b">Район</span>
                        <div class="line_list"></div>
                        <nav2>
                            <ul id="list2">
                                <li><span class="category-btn b" data-category="all"></span>Все</li>
                                <li><span class="category-btn b" data-category="sea"></span>У моря</li>
                            </ul>
                        </nav2>

                    </li>
                    <li><span class="text3"><img src="caret.png" id="caret_c">Категория объекта</span>
                        <div class="line_list"></div>
                        <nav3>
                            <ul id="list3">
                                <li><span class="category-btn c" data-category="three"></span>Трехзвездочные</li>
                                <li><span class="category-btn c" data-category="four"></span>Четырехзвездочные</li>
                                <li><span class="category-btn c" data-category="five"></span>Пятизвездочные</li>
                            </ul>
                        </nav3>
<div class="box hotels sea">
                    <div class="img_place"><img src="talka.png" width="351" height="200px">
                        <div class="name">ПРИМОРЬЕ</div>
                        <div class="place">1,21 км от центра</div>
                        <div class="container3">

                            <div class="Date_box">
                                <div class="logo_date"><img src="date.png"></div>
                                <div class="Date">с &nbsp; &nbsp; 04.07.23 (пт) <br>
                                    по&nbsp;&nbsp; 07.07.23 (пн)</div>
                            </div>
                            <div class="Coin_box">
                                <div class="logo_coin"><img src="coin.png"></div>
                                <div class="coin">75 000 ₽</div>
                                <div class="nights">(3 ночи/2 гостя)</div>

                            </div>

                        </div>
                    </div>
                </div>
                <div class="box sanatoriums sea three ">
                    <div class="img_place"><img src="kavkaz.png" width="351" height="200px">
                        <div class="name">ПРИМОРЬЕ GRAND RESORT HOTEL</div>
                        <div class="place">1,21 км от центра</div>
                        <div class="container3">

                            <div class="Date_box">
                                <div class="logo_date"><img src="date.png"></div>
                                <div class="Date">с &nbsp; &nbsp; 04.07.23 (пт) <br>
                                    по&nbsp;&nbsp; 07.07.23 (пн)</div>
                            </div>
                            <div class="Coin_box">
                                <div class="logo_coin"><img src="coin.png"></div>
                                <div class="coin">75 000 ₽</div>
                                <div class="nights">(3 ночи/2 гостя)</div>

                            </div>

                        </div>
                    </div>
                </div>

.filter {
    opacity: 1;
    animation-name: a1;
    animation-duration: 0s;
    animation-fill-mode: forwards;
}

@keyframes a1 {
    to {
        opacity: 0;
        display: none;
    }
}

<script>
        const filterBox1 = document.querySelectorAll('.box');

        document.querySelector('nav1').addEventListener('click', event => {
            if (event.target.tagName !== 'SPAN') return;
            let filterClass = event.target.dataset.category;
            filterBox1.forEach(elem => {
                elem.classList.remove('filter');
                if (!elem.classList.contains(filterClass) && filterClass !== 'all') {
                    elem.classList.add('filter');
                }
            });
         
        });
       
    </script>
    <script>
        const filterBox2 = document.querySelectorAll('.box');

        document.querySelector('nav2').addEventListener('click', event => {
            if (event.target.tagName !== 'SPAN') return;
            let filterClass = event.target.dataset.category;
            filterBox2.forEach(elem => {
                elem.classList.remove('filter');
                if (!elem.classList.contains(filterClass) && filterClass !== 'all') {
                    elem.classList.add('filter');
                }
            });
         
        });
       
    </script>
    <script>
        const filterBox3 = document.querySelectorAll('.box');

        document.querySelector('nav2').addEventListener('click', event => {
            if (event.target.tagName !== 'SPAN') return;
            let filterClass = event.target.dataset.category;
            filterBox3.forEach(elem => {
                elem.classList.remove('filter');
                if (!elem.classList.contains(filterClass) && filterClass !== 'all') {
                    elem.classList.add('filter');
                }
            });
         
        });
       
    </script>
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы