Прятать элементы на основе введённого текста

На сайте есть слайдер (swiper js) с разными типами слайдов. Для каждого типа свой доп. класс, задача прятать все элементы не содержащие название этого класса после ввода его в input Подскажите куда копать, поиск ничего похожего не выдает


Ответы (1 шт):

Автор решения: Neakit

Вам нужно использовать метод removeSlide. Пример кода привел ниже. Классы могут не соответствовать элементам - код писал на основе примера из доки swiper.js. Введите в поле, например, "slide-2" и отфильтруйте.

const slides = [
  { title: "Slide 1", class: "slide-1" },
  { title: "Slide 2", class: "slide-2" },
  { title: "Slide 3", class: "slide-3" },
  { title: "Slide 4", class: "slide-2" }
];

const initSlider = () => {
  const swiperWrapper = document.querySelector(".swiper-wrapper");
  while (swiperWrapper.firstChild) {
    swiperWrapper.removeChild(swiperWrapper.firstChild);
  }
  slides.forEach((el) => {
    let slide = document.createElement("div");
    slide.classList.add("swiper-slide", `${el.class}`);
    slide.innerHTML = el.title;
    swiperWrapper.appendChild(slide);
  });
};

initSlider();

var swiper = new Swiper(".mySwiper", {
  slidesPerView: 3,
  centeredSlides: true,
  spaceBetween: 30,
  pagination: {
    el: ".swiper-pagination",
    type: "fraction"
  },
  navigation: {
    nextEl: ".swiper-button-next",
    prevEl: ".swiper-button-prev"
  }
});

document
  .querySelector(".hide-slides-btn")
  .addEventListener("click", function (e) {
    e.preventDefault();
    const selector = document.querySelector("input").value;
    const slides = document.querySelectorAll(`.${selector}`);
    slides.forEach((s, index) => {
      swiper.removeSlide(index);
    });
  });

document
  .querySelector(".reset-slides-btn")
  .addEventListener("click", function (e) {
    const input = document.querySelector("input");
    input.value = "";
    initSlider();
    swiper.update();
});
.swiper {
  width: 100%;
  height: 100%;
}

.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
}

.swiper-slide img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.swiper {
  width: 100%;
  height: 300px;
  margin: 20px auto;
}

.append-buttons {
  text-align: center;
  display: flex;
  justify-content: center;
  margin-top: 20px;
}

.append-buttons button {
  display: inline-block;
  cursor: pointer;
  border: 1px solid #007aff;
  color: #007aff;
  text-decoration: none;
  padding: 4px 10px;
  border-radius: 4px;
  margin: 0 10px;
  font-size: 13px;
}

input {
  display: block;
  padding: 0.375rem 0.75rem;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.5;
  color: #212529;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #007aff;
  appearance: none;
  border-radius: 0.25rem;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Swiper demo</title>
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"
    />
    <!-- Link Swiper's CSS -->
    <link
      rel="stylesheet"
      href="https://unpkg.com/swiper/swiper-bundle.min.css"
    />
    <script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
  </head>

  <body>
    <div #swiperRef="" class="swiper mySwiper">
      <div class="swiper-wrapper"></div>
      <div class="swiper-button-next"></div>
      <div class="swiper-button-prev"></div>
      <div class="swiper-pagination"></div>
    </div>
    <p class="append-buttons">
      <input type="text" />
      <button class="hide-slides-btn">Hide Slides</button>
      <button class="reset-slides-btn">Reset Slides</button>
    </p>
  </body>
</html>

ПС Что делать с ответом

→ Ссылка