I want to filter some content using checkboxes.
I’ve managed to do that thanks to an earlier post which I’ve simplified a bit here DEMO.
My problem is that each content item can have more than one category attached.When I select category A and category B and then deselect category B, the content item that have both categories attached are removed.
The project I’m working on is going to contain more than two categories. A content item can have many categories attached
HTML:
<ul id="filters">
<li>
<input type="checkbox" value="categorya" id="filter-categorya" />
<label for="filter-categorya">Category A</label>
</li>
<li>
<input type="checkbox" value="categoryb" id="filter-categoryb" />
<label for="filter-categoryb">Category B</label>
</li>
</ul>
<div class="categorya categoryb">A, B</div>
<div class="categorya">A</div>
<div class="categorya">A</div>
<div class="categorya">A</div>
<div class="categoryb">B</div>
<div class="categoryb">B</div>
<div class="categoryb">B</div>
Javascript:
$('input').click(function() {
var category = $(this).val();
if (!$(this).attr('checked')) $('.' + category).hide();
else $('.' + category).show();
});
I think the two most straightforward approaches would be on click of any of the filter checkboxes either:
Hide all
<div>elements, then loop through the checkboxes and for each checked one.show()the<div>elements with the associated category.Loop through all checkboxes to make a list of the classes to be shown, then loop through the
<div>elements, checking each one to see if it has one of those classes and.hide()or.show()as appropriate.Is there some general selector you can use to get all the
<div>elements? Do they have a particular container element, like how all the checkboxes are descendents of “#filters”?Demo: http://jsfiddle.net/6wYzw/41/
Demo: http://jsfiddle.net/6wYzw/42/
I guess the first way is shorter, and easier to maintain…