Прятать элементы на основе введённого текста
На сайте есть слайдер (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>