2016-07-28 21 views
-1

Ich versuche, mit mehreren Kontrollkästchen zu filtern, und ich habe den Code aus der Antwort in diesem Beispiel verwendet: Jquery filtering with multiple Checkboxes Es funktioniert wirklich gut, aber ich brauche die Ergebnisse, um eine Kombination der Kontrollkästchen zu zeigen. Im Moment stimmt es nur genau mit dem Checkbox-Filterresultat überein. Ich möchte, dass alle Ergebnisse angezeigt werden, wenn die Objekte eine 1 des Arrays und nicht genau das Array enthalten. Ich kann nicht Isotop für mein bestimmtes Projekt verwenden, aber es wäre wie dieses Isotops Beispiel sein:Jquery-Filterung mit mehreren Kombinationsfeldern

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

EDIT: Es ist dieses Stück Code inparticular weiß ich, Bedürfnisse ändern. Im Moment durchläuft es das Array und zeigt den Inhalt an, wenn das Element exakt mit der Checkbox-Kategorie übereinstimmt. Ich brauche es durch das Array in einer Schleife und den Inhalt zeigen, wenn eine der Kategorien eine der Array-Variablen entsprechen:

 // 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; 

      }); 
     }); 
+0

Gibt es etwas Besonderes über den Code, mit dem Sie Probleme haben zu verstehen? Wenn Sie Code aus einem Online-Beispiel verwenden, wie Sie es hier getan haben, ist es wichtig zu verstehen, was getan wird, warum und wie es implementiert wird. So werden Sie nicht von bösen Fehlern überrascht oder haben zumindest eine Vorstellung davon, wo Sie suchen müssen. Wie dem auch sei, zufälliger Internetcode tut nicht genau das, was Sie wollen, und Sie verlangen von jemandem, der es für Sie repariert. Es wäre gut zu zeigen, dass du versucht hast zu verstehen, und stecken geblieben bist, (mit einem kurzen Beispiel) (http://meta.stackexchange.com/q/22754/218143) um zu starten – tmpearce

+0

Danke, ich habe gerade meine Antwort bearbeitet. Ich kenne den Teil des Codes, den ich ändern muss, und ich verstehe, was da ist. Ich denke, ich bin fast da, ich versuche nur, die Logik und die Funktion zu verstehen, die ich brauche. Ich habe meine Frage oben bearbeitet, um sie hoffentlich besser zu erklären ... – Julz

Antwort

0

In der äußeren Schleife:

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

Sie sind über jeden der Iterieren ausgewählte Filter entfernen progressiv diejenigen, die nicht mit dem Filter übereinstimmen.

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

Die einzigen Gegenstände, die sie durch alle die Filter erfüllen machen (das heißt Sie sind eine logische UND-Operation tun). Stattdessen müssen Sie die .card Elemente einmal filtern und true zurückgeben, wenn einer der $(this).data('category') Werte für das Element mit einem der ausgewählten Filter übereinstimmt. Auf diese Weise führen Sie stattdessen eine logische ODER-Operation durch.