I need to show divs that has two data (data-filter-color
,data-filter-size
),
The idea is, first you select color and correct divs show up, next you select size and div with color and size selected should show. My question is how can I validate selected options. My code bellow. My issue is that everything is displayed when two data picked.
Adding HTML example
// FILTERS
var wybranyKolor = [];
var wybranyRozmiar = [];
var filtryArray = [];
function selectOdmiana() {
document.querySelectorAll(".produkty").forEach(produkty => {
var grupaSelect = produkty.querySelectorAll(".grupa");
grupaSelect.forEach((itemOdmiana) => {
var odmianaFilter = itemOdmiana.querySelector(".sg_category_product").querySelectorAll(".filter-item");
odmianaFilter[0].classList.add("sg_active");
liczFiltry = 0;
odmianaFilter.forEach((item, i) => {
liczFiltry++;
item.addEventListener("click", (f) => {
mySelected(itemOdmiana, item);
odmianaFilter.forEach((it, i) => {
wybranyKolor = [];
wybranyRozmiar = [];
it.classList.remove("sg_active");
})
item.classList.add("sg_active");
itemOdmiana.querySelectorAll(".odmiana").forEach((odmiana, i) => {
odmiana.classList.remove("sg_odmiana_active");
});
itemOdmiana.querySelector(".odmiana." + item.getAttribute("data-filter").replace(" ", "-")).classList.add("sg_odmiana_active");
itemOdmiana.querySelector(".sg_odmiana_active").querySelectorAll(".product-item").forEach((box, i) => {
box.style.display = "block";
});
var resizeEvent = new Event('resize');
window.dispatchEvent(resizeEvent);
})
newMySelected(itemOdmiana, item);
});
selectFilter(itemOdmiana);
});
});
}
function mySelected(itemOdmiana, item) {
if (itemOdmiana.querySelector('.sg_category_color')) {
var colorGroup = itemOdmiana.querySelector(".sg_category_color").querySelectorAll(".color_group");
colorGroup.forEach((colorItem, i) => {
if (colorItem.getAttribute("data-odmiana") == item.getAttribute("data-filter")) {
colorItem.style.display = "flex";
} else {
colorItem.style.display = "none";
}
});
}
if (itemOdmiana.querySelector('.sg_category_rozmiar')) {
var rozmiarGroup = itemOdmiana.querySelector(".sg_category_rozmiar").querySelectorAll(".rozmiar_group");
rozmiarGroup.forEach((rozmiarItem, i) => {
if (rozmiarItem.getAttribute("data-odmiana") == item.getAttribute("data-filter")) {
rozmiarItem.style.display = "flex";
} else {
rozmiarItem.style.display = "none";
}
});
}
}
function selectFilter(itemOdmiana) {
if (itemOdmiana.querySelector('.sg_category_color')) {
var colorFilter = itemOdmiana.querySelector('.sg_category_color').querySelectorAll('.filter-item');
// KOLORY
colorFilter.forEach((button) => {
button.addEventListener("click", (e) => {
colorFilter.forEach((thisColor) => {
thisColor.classList.remove("sg_active");
wybranyKolor.pop(filtrColor);
// showProducts();
})
button.classList.add("sg_active");
var filtrColor = button.getAttribute('data-filter');
wybranyKolor.push(filtrColor);
// sliderFix();
showProducts(itemOdmiana, filtrColor);
});
});
}
if (itemOdmiana.querySelector('.sg_category_rozmiar')) {
var sizeFilter = itemOdmiana.querySelector('.sg_category_rozmiar').querySelectorAll('.filter-item');
// ROZMIAR
sizeFilter.forEach((button) => {
button.addEventListener("click", (e) => {
sizeFilter.forEach((thisSize) => {
thisSize.classList.remove("sg_active");
wybranyRozmiar.pop(filtr);
// showProducts();
})
button.classList.add("sg_active");
var filtr = button.getAttribute('data-filter');
wybranyRozmiar.push(filtr);
// sliderFix();
showProducts(itemOdmiana, filtr);
});
});
}
}
function showProducts(itemOdmiana) {
itemOdmiana.querySelectorAll('.glide__slides').forEach(gridDiv => {
var boxPro = gridDiv.querySelectorAll('.product-item');
boxPro.forEach((elementDiv) => {
var kolorCheck = elementDiv.getAttribute("data-filter-color");
var rozmiarCheck = elementDiv.getAttribute("data-filter-size");
if (wybranyKolor == kolorCheck) {
elementDiv.style.display = 'block';
} else {
elementDiv.style.display = 'none';
}
if (wybranyRozmiar == rozmiarCheck) {
elementDiv.style.display = 'block';
} else {
elementDiv.style.display = 'none';
}
});
});
}
document.addEventListener("DOMContentLoaded", function () {
selectOdmiana();
});
<div class="sg_filtry_box_div">
<div class="sg_category_color category_filter">
<p>Kolor:</p>
<div class="color_group" data-odmiana="iphone-11">
<span class="color-filter-item filter-item zloty" data-filter="zloty">zloty</span>
<span class="color-filter-item filter-item zielony" data-filter="zielony">zielony</span>
<span class="color-filter-item filter-item srebrny" data-filter="srebrny">srebrny</span>
</div>
</div>
<div class="sg_category_rozmiar category_filter">
<p>Pojemność:</p>
<div class="rozmiar_group" data-odmiana="iphone-13-pro">
<span class="rozmiar-filter-item filter-item 1000" data-filter="1000">1000</span>
<span class="rozmiar-filter-item filter-item 512" data-filter="512">512</span>
</div>
</div>
<li class="glide__slide product-item active-product glide__slide--active" data-filter-size="256" data-filter-color="bialy">
test1
</li>
<li class="glide__slide product-item active-product glide__slide--active" data-filter-size="256" data-filter-color="bialy">
test2
</li>
<li class="glide__slide product-item active-product glide__slide--active" data-filter-size="256" data-filter-color="bialy">
test3
</li>