gpt4 book ai didi

javascript - 根据两个条件过滤

转载 作者:行者123 更新时间:2023-11-29 18:03:05 25 4
gpt4 key购买 nike

我有八张卡片,每张卡片上都有两个参数。第一个参数是年份(2011、2012、2013、2014),第二个是类别(studio、house、personal、commercial)。它看起来像这样:

  • 工作室 2011
  • 2012 年
  • 商业 2013
  • 个人 2012
  • 工作室 2014
  • 商业 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>

当用户点击年份按钮时,我们会获取具有所需年份类别的卡片并删除其“明亮/褪色”类别以防万一。然后我们为这些卡片添加“明亮”类。然后我们取出所有不需要年份的卡片并将它们添加到“褪色”类(也删除以前的类以防万一)。我们还使按钮带有下划线,而其 sibling 则没有下划线。一切看起来像这样:

$(".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/

现在看起来很简单,但是当我尝试添加第二个排序条件类别时,麻烦就来了。

一方面,我当然需要做同样的事情,就像第一种情况一样,我。 e.使需要的类别变亮,不需要的变暗:

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");
}

这有点帮助,但我仍然不知道现在如何添加所需类别的剩余卡片,以便满足两个条件。那么,如何将对以前的排序结果进行排序对所有元素进行排序结合起来呢?

摆弄所有按钮:https://jsfiddle.net/hm1emr8p/

最佳答案

我认为您的方法有点过于复杂。以下适用于任意数量的过滤器。诀窍是保持所选内容的状态,并且在进行任何更改时只需将此状态重新应用到卡片元素即可。

(function () {
var active = [];

$('.filter').each(function (idx, el) {
var $el = $(el);

active.push('');

$el.on('click', '.button', function () {
var $this = $(this);

active[idx] = $this.data('toggle');

$el.find('.button').removeClass('button-active');
$this.addClass('button-active');

update();
});
});

function update()
{
var a = active.join('');

if (a.length === 0) {
$('.card').removeClass('card-faded');
}
else {
$('.card').addClass('card-faded').filter(active.join('')).removeClass('card-faded');
}
}
})();
a {
text-decoration: none;
color: black;
}

.buttons {
margin-top: 40px;
}

.time {
margin-bottom: 20px;
}

.card-faded {
opacity: 0.3;
}

.button-active {
text-decoration: underline;
}
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

<div class="card card-2011 card-studio">Studio 2011</div>
<div class="card card-2012 card-house">House 2012</div>
<div class="card card-2013 card-commercial">Commercial 2013</div>
<div class="card card-2012 card-personal">Personal 2012</div>
<div class="card card-2014 card-studio">Studio 2014</div>
<div class="card card-2011 card-commercial">Commercial 2011</div>
<div class="card card-2014 card-house">House 2014 </div>
<div class="card card-2013 card-personal">Personal 2013</div>

<div class="buttons">
<div class="filter time">
<a class="button button-2011" data-toggle=".card-2011">2011</a>
<a class="button button-2012" data-toggle=".card-2012">2012</a>
<a class="button button-2013" data-toggle=".card-2013">2013</a>
<a class="button button-2014" data-toggle=".card-2014">2014</a>
<a class="button button-all button-active" data-toggle="">All time</a>
</div>

<div class="filter category">
<a class="button button-studio" data-toggle=".card-studio">Studio</a>
<a class="button button-house" data-toggle=".card-house">House</a>
<a class="button button-commercial" data-toggle=".card-commercial">Commercial</a>
<a class="button button-personal" data-toggle=".card-personal">Personal</a>
<a class="button button-all button-active" data-toggle="">All</a>
</div>
</div>

关于javascript - 根据两个条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com