У меня есть восемь карт с двумя параметрами на каждом из них. Первый параметр - год (2011, 2012, 2013, 2014), второй - категория (студия, дом, личный, коммерческий). Это выглядит следующим образом:Фильтрация на основе двух условий
- Studio 2011
- дом 2012
- Коммерческий 2013
- Персональная 2012
- Студия 2014
- Commercial 2011
- дом 2014
- Личные 2013
Мне нужно разобраться с ними, сделав необходимые карты яркими, а не обязательно выцветшими. По умолчанию все они яркие. HTML:
<div class="card card-studio card-2011 card-bright">Studio 2011</div>
<div class="card card-house card-2012 card-bright">House 2012</div>
<div class="card card-commercial card-2013 card-bright">Commercial 2013</div>
<div class="card card-personal card-2012 card-bright">Personal 2012</div>
<div class="card card-studio card-2014 card-bright">Studio 2014</div>
<div class="card card-commercial card-2011 card-bright">Commercial 2011</div>
<div class="card card-house card-2014 card-bright">House 2014 </div>
<div class="card card-personal card-2013 card-bright">Personal 2013</div>
добавить кнопки с годами:
<a href="#" class="button button-2011">2011</a>
<a href="#" class="button button-2012">2012</a>
<a href="#" class="button button-2013">2013</a>
<a href="#" class="button button-2014">2014</a>
Когда пользователь нажимает на кнопку года, мы принимаем карты с необходимым годом классом и снять их «светлые/выцветшие» классы на всяком случае. Затем мы добавляем к этим картам «яркий» класс. Затем мы берем все карты, которые не нужны год и добавляем их «увядший» класс (также на всякий случай удаляя предыдущие классы). И мы также делаем кнопку подчеркнутой, и ее братья и сестры не подчеркнуты. Все это выглядит следующим образом:
$(".button").on("click", function(event){
event.preventDefault();
if($(this).hasClass("button-2011")){
$(".card-2011").removeClass("card-bright card-faded").addClass("card-bright");
$(".card").not(".card-2011").removeClass("card-bright card-faded").addClass("card-faded");
$(this).siblings().removeClass("button-active").end().addClass("button-active");
}
JSfiddle: https://jsfiddle.net/6vLzyowc/
Теперь все это кажется простым, но беда приходит, когда я пытаюсь добавить второе условие сортировки, категории.
С одной стороны, я, безусловно, должен сделать то же самое, что и в первом случае, i. е. сделать нужно категории яркими, не нужно было утрачено:
if($(this).hasClass("button-house")){
$(".card-house").removeClass("card-bright card-faded").addClass("card-bright");
$(".card").not(".card-house").removeClass("card-bright card-faded").addClass("card-faded");
}
Но это сделает «яркие» все карты с нужной категорией, и у меня есть в прошлом году сортировки результатов. Кажется, мне нужно разобраться с ними в первую очередь. Итак, я беру первый год сортировки результатов (то есть «яркие» карты) и сделать из них без необходимой категории «выцветший»:
if($(this).hasClass("button-house")){
$(".card-bright").not("card-house").addClass("card-faded");
}
Это помогает немного, но я до сих пор не знаю, как я могу добавить оставшиеся карточки с нужной категорией сейчас, чтобы оба условия были выполнены. Итак, как я могу объединить , сортируя предыдущие результаты сортировки и сортировать все предметы?
Fiddle со всеми кнопками: https://jsfiddle.net/hm1emr8p/
Ваше использование слова «сортировка» запутанно; действительно ли происходит фактическая сортировка (переупорядочение)? – Pointy
Я думаю, что они означают «фильтр». – Quantastical
Переосмысление кнопки rabio. – epascarello