Я создаю продуктовый фильтр для интернет-магазина. В настоящее время есть 3 категории (свойства продукта), но количество категорий может варьироваться. Я уже целый день занимаюсь этой невероятно простой задачей, но не могу найти решение, которое бы соответствовало моим потребностям на 100%. Искал SO, но не смог найти точного соответствия для моей проблемы.
Сейчас у меня работает некоторый код, который показывает только продукты с точными свойствами. Проблема в том, что это слишком ограничивает.
Это код, который я сейчас имею для фильтрации продуктов, фильтр не должен получать данные с сервера, все продукты доступны и имеют класс фильтразначения:
JS
$('.choice_form').change(function(evt){
var filter = $(':input:checked,select').map(function(index, el) {
return "." + el.value;
}).toArray().join("");
$(".vis-products").hide().filter(filter).show();
});
HTML:
<div class="categories default-text">
<!-- choice help -->
<div class="choicehelp-wrapper">
<b class="black">Basisdeel</b><br><label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft12" class="choice_form js" data-group="product" data-action="choicehelp" data-value="12" data-id="1" style="margin:6px 0px 6px 0px"> Kunststof, zwart</label><br>
<label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft13" class="choice_form js" data-group="product" data-action="choicehelp" data-value="13" data-id="1" style="margin:6px 0px 6px 0px"> Messing, nikkel</label><br><br><b class="black">Insteek</b><br>
<label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft11" class="choice_form js" data-group="product" data-action="choicehelp" data-value="11" data-id="2" style="margin:6px 0px 6px 0px"> Knie insteek koppeling</label><br><label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft9" class="choice_form js" data-group="product" data-action="choicehelp" data-value="9" data-id="2" style="margin:6px 0px 6px 0px"> Rechte inschroef koppeling</label><br>
<label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft10" class="choice_form js" data-group="product" data-action="choicehelp" data-value="10" data-id="2" style="margin:6px 0px 6px 0px"> T-inschroef koppeling</label><br><br><b class="black">Inschroef</b><br>
<label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft7" class="choice_form js" data-group="product" data-action="choicehelp" data-value="7" data-id="3" style="margin:6px 0px 6px 0px"> M4 Diameter</label><br><label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft4" class="choice_form js" data-group="product" data-action="choicehelp" data-value="4" data-id="3" style="margin:6px 0px 6px 0px"> M5 Diameter</label><br>
<label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft6" class="choice_form js" data-group="product" data-action="choicehelp" data-value="6" data-id="3" style="margin:6px 0px 6px 0px"> M8 Diameter</label><br><label class="noselect choicehelp_text"><input type="checkbox" name="choice_option[]" value="ft8" class="choice_form js" data-group="product" data-action="choicehelp" data-value="8" data-id="3" style="margin:6px 0px 6px 0px"> M9 Diameter</label> </div>
</div>
И html продукта:
<div class="visnav3 vis-products vis-catalog js ft11 ft12 filterOn" data-group="product" data-action="goto-details" data-id="111111" data-value="DEMO-2" style="">....</div>
Класс ftxx соответствует флажкузначения.
Слишком много, чтобы включить, вы можете просмотреть его здесь: https://www.technicomponents.nl/nl/p/pneumatiek/insteekkoppelingen/knie-koppelingen/
Это должно сделать это:
Случай 1. Если вы просто нажмете 1 фильтрвсе продукты с таким фильтром в качестве имени класса должны быть видны
Случай 2. Если вы выберете, например, 2 или более фильтров из 1 категории, все продукты, для которых выбран фильтр в качестве класса, должны быть видны.
Случай 3. Если вы выбираете одно или несколько значений из нескольких категорий, это должно быть что-то вроде:
ГДЕ
Категория 1:
- Фильтр x ИЛИ
-Фильтр y ИЛИ
- Фильтр z ИЛИ
И
Категория 2:
- Фильтр x ИЛИ
- Фильтр z ИЛИ
И
Категория 3:
- Фильтр y ИЛИ
- Фильтр z ИЛИ
Текущий кодработает только при выборе 1 значения (из одной или нескольких категорий).