使用多个组合复选框进行Jquery过滤

时间:2016-07-28 00:36:55

标签: jquery arrays filter filtering

我尝试使用多个复选框进行过滤,并且我已经使用了此示例中答案中的代码:Jquery filtering with multiple Checkboxes它的效果非常好,但我需要将结果显示为复选框。目前它只与复选框过滤结果完全匹配。如果对象包含任何1个数组,而不是数组,则希望它显示所有结果。我不能在我的特定项目中使用同位素,但它就像这个同位素示例:

  <a href="http://codepen.io/desandro/pen/btFfG">

编辑:特别是我知道需要改变的代码。目前它循环遍历数组并显示内容,如果该元素与该复选框类别匹配。我需要它遍历数组并显示内容,如果任何类别匹配任何数组变量:

       // create a collection containing all of the filterable elements
        var $filteredResults = $('.card');

        // loop over the selected filter name -> (array) values pairs
        $.each(selectedFilters, function(name, filterValues) {

            // filter each .card element
            $filteredResults = $filteredResults.filter(function() {

                var matched = false;
                var currentFilterValues = $(this).data('category').split(' ');

                // loop over each category value in the current .card's data-category
                $.each(currentFilterValues, function(_, currentFilterValue) {

                    // if the current category exists in the selected filters array
                    // set matched to true, and stop looping. as we're ORing in each
                    // set of filters, we only need to match once
                    if ($.inArray(currentFilterValue, filterValues) != -1) {
                      matched = true;
                      return false;
                    }
                });

                // if matched is true the current .card element is returned
                return matched;

            });
        });

1 个答案:

答案 0 :(得分:0)

在外圈:

$.each(selectedFilters, function(name, filterValues) {...

您正在逐步迭代每个选定的过滤器,从而消除那些与过滤器不匹配的过滤器。

$filteredResults = $filteredResults.filter(function() {...

通过它的唯一项目满足所有过滤器(即您正在进行逻辑AND操作)。相反,您需要过滤.card项一次,如果项的任何$(this).data('category')值与任何选定过滤器匹配,则返回true。这样你就可以进行逻辑OR操作。