使用jquery进行Div过滤

时间:2015-09-30 17:01:27

标签: jquery filtering product

您好我想使用多个复选框制作div过滤器,这些复选框具有div具有类的值。 我的js正在比较those的值和类,并显示类似的。 我想把这些复选框结合起来。例如,当检查glutenitoon和maidoton时,不应显示仅含maidoton或仅使用glutenitoon的元素。

这是codepen http://codepen.io/anon/pen/yYgpda

编辑:解决方案> http://codepen.io/anon/pen/KdaGwM

<div id="filters">
        <input type="checkbox" name="gluteeniton" value="gluteeniton" id="filter-gluteeniton">Gluteeniton
        <input type="checkbox" name="laktoositon" value="laktoositon" id="filter-laktoositon">Laktoositon
        <input type="checkbox" name="vahalaktoosinen" value="vahalaktoosinen" id="filter-vahalaktoosinen">Vähälaktoosinen
        <input type="checkbox" name="maidoton" value="maidoton" id="filter-maidoton">Maidoton
        <input type="checkbox" name="soijaton" value="soijaton" id="filter-soijaton">Soijaton
    </div>

    <div class="filtered-products">                    
        <div class="element gluteeniton laktoositon maidoton">gluteeniton laktoositon maidoton</div>
        <div class="element laktoositon maidoton">laktoositon maidoton</div>
        <div class="element gluteeniton">gluteeniton</div>
        <div class="element soijaton">Soijaton</div>
        <div class="element maidoton soijaton">Maidoton Soijaton</div>
        <div class="element maidoton">Maidoton</div>
        <div class="element laktoositon">Laktoositon</div>
    </div>   



$(".element").hide();
$("#filters input").click(function() { 
        var checked = $("#filters input ").is(':checked');
        if (checked) {

            $("#filters :checkbox:checked").each(function() {
                $("." + $(this).val()).show();
            });
        }
        else {
        $(".element").hide();
        }    

  });   

3 个答案:

答案 0 :(得分:0)

如果我的问题是对的,那么以下应该是解决方案。请检查一下这段代码

$(".element").hide();
$("#filters input").click(function() { 
var checked = $(this).is(':checked');
if (checked) {


    $("#filters input[type='checkbox']:checked").each(function() {
        $("." + $(this).val()).show();
    });
}
else {

    $(".element."+$(this).val()).hide();
    $("#filters input[type='checkbox']:checked").each(function() {
        $("." + $(this).val()).show();
    });
}
}); 

答案 1 :(得分:0)

除了您需要隐藏每次点击时显示的所有方框然后显示匹配的方框外,它似乎对我有用。这应该工作。

$(".element").hide();
$("#filters input").click(function() { 
    $(".element").hide();
    var checked = $("#filters :checkbox:checked").map(function(){
        return $(this).val();
    }).get().join('.');
    $('.element.' + checked).show();
}); 

编辑:更改代码以符合严格匹配的要求。要选择具有多个类的元素,只需列出与句点链接的选择器中的所有类。 (例如$(&#39; .class1.class2.class3))Map函数将其内部函数(在本例中为值)的所有结果作为数组返回。然后,如果您使用句点作为分隔符加入数组,则可以使用所需的选择器。

如果您想要一个非常酷的jquery过滤和排序插件,那么您不必尝试自己编写它来看看Quicksand:http://razorjack.net/quicksand/

答案 2 :(得分:0)

我必须完全改变方法并使用数据属性 答案就在这里 http://codepen.io/anon/pen/zvNjGr

$('#filters').delegate('input[type=checkbox]', 'change', function() {
                    var $lis = $('.filtered-products > div'),
                        $checked = $('input:checked');
                    if ($checked.length)
                    {                           
                        var selector = '';
                        $($checked).each(function(index, element){                            
                            selector += "[data-category~='" + element.id + "']";                            
                        });                        
                        $lis.hide();                        
                        $('.filtered-products > div').filter(selector).show();             
                    }
                    else
                    {
                        $lis.show();
                    }
                });