jquery - 具有多个类的jQuery过滤器如何“删除”一个过滤器而不删除两个类的结果?
问题描述
我试图仅使用 HTML、CSS 和 jQuery 创建过滤解决方案,但未成功。没有运气在其功能中获得“独家”的东西(下面的示例)。
我正在创建一个过滤解决方案,例如:
未选中复选框时,不显示任何内容
对于选中的每个复选框,都会显示相应的按钮(带有类)
如果选中两个,则只显示具有两个类的按钮
如果未选中其中一个复选框,则取消添加的选择性元素。
例子 :
A 是蓝色和白色
B是白色和灰色
C是蓝色和白色和橙色
D是蓝色和金色
如果我选择蓝色,我将有:A 和 C 和 D 作为结果
如果我同时选择蓝色和白色,我将得到:A 和 C 作为结果
当我取消选中白色时,我应该再次将 A 和 C 和 D 作为结果
目前,在检查时,我不能只检查两个类,而在取消选中时,它只会隐藏具有相应类的元素。
在我的示例中,这意味着:
如果我同时选择了蓝色和白色,我将得到 A、B、C 和 D 作为结果。
当我取消选中 WHITE 时,我只会得到 D。
有人能帮帮我吗?先感谢您 !
$(document).ready(function(){
$('.form-checkbox form input[type="checkbox"]').click(function() {
if( $(this).is(':checked')) {
$("."+$(this).attr('id')).css('display', 'inline-flex');
} else {
$("."+$(this).attr('id')).hide();
}
});
});
解决方案
你可以这样做:
$(document).ready(function(){
var $all = $('.form-checkbox form input[type="checkbox"]');
function refresh() {
$(".card").hide(); // First hide all
if (!$all.is(":checked")) return; // If nothing checked: that's it
var ids = $all.filter(":checked").map(function () {
return $(this).attr('id'); // Collect all the IDs of the selected items
}).get().join("."); // ... and join them into one CSS class selector
$("." + ids).css('display', 'inline-flex'); // Show those only
}
$all.click(refresh);
refresh(); // Run immediately
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-checkbox">
<form>
<label><input type="checkbox" id="apples">Apples</label>
<label><input type="checkbox" id="pears">Pears</label>
<label><input type="checkbox" id="cucumbers">Cucumbers</label>
<label><input type="checkbox" id="dates">Dates</label>
<label><input type="checkbox" id="eggs">Eggs</label>
<label><input type="checkbox" id="figs">Figs</label>
<label><input type="checkbox" id="grapes">Grapes</label>
</form>
</div>
<ul>
<li class="card dates apples"><button>dates-apples</button></li>
<li class="card dates apples cucumbers"><button>dates-apples-cucumbers</button></li>
<li class="card dates eggs"><button>dates-eggs</button></li>
<li class="card figs apples"><button>figs-apples</button></li>
<li class="card dates grapes apples"><button>dates-grapes-apples</button></li>
<li class="card dates cucumbers"><button>dates-cucumbers</button></li>
<li class="card dates pears apples"><button>dates-pears-apples</button></li>
<li class="card dates apples"><button>dates-apples</button></li>
<li class="card pears dates apples eggs"><button>pears-dates-apples-eggs</button></li>
<li class="card dates eggs"><button>dates-eggs-2</button></li>
<li class="card "><button>nothing</button></li>
<li class="card figs"><button>figs</button></li>
<li class="card dates apples grapes"><button>dates-apples-grapes</button></li>
<li class="card figs pears"><button>figs-pears</button></li>
<li class="card cucumbers figs"><button>cucumbers-figs</button></li>
</ul>
推荐阅读
- windows - 标签标题中的字符数是否有(Windows)限制?
- javascript - 单击提交按钮时,如何获取测验问题以及上一个/下一个按钮以显示?
- r - RShiny 启用/禁用 UI 模块
- javascript - 将 Yii1 代码转换为 Yii2(更改语言部分)
- python - 错误:简单登录 GUI 的“分配函数调用的结果,其中函数没有返回”
- reactjs - 获取反应组件中的文本(单词)总数
- google-cloud-platform - 项目之间的“区域”是否不同?
- kotlin - 将图像加载到 RecyclerView 单元格中
- simulink - 在 Simulink 生成的代码中避免使用长整数(32 位)
- python - 如何在 Python 中的同一类中的方法中刷新实例变量列表?