2016-09-10 3 views
0

I jquery .filter() bin mit bestimmten Produkten filtern in meinem page.The Dom Struktur sieht wie folgt aus ..anzeigen jquery die gefilterten Artikel

<body> 
    <ul class='products'> 
    <li class='product' data-company="something" data-shape="cake" data-flavour="something"></li> 
    . 
    . 
    . 
    . 
    . 
    <li class='product' data-company="something" data-shape="cake" data-flavour="something"></li> 
    </ul> 
    </body> 

Meine Filter Kontrollkästchen enthält, so dass, wenn jemand überprüft ruft es meine Klasse auf, die meine Filterfunktion einleitet.

My filter function looks something likes this 
    this.filterGridProducts = function() { 
     //hide all 
    _this.products.hide(); 
    var filteredProducts = _this.variants; 
    //filter by colour, size, shape etc 

    var filterAttributes = $('input[type="checkbox"]'); 
    var selectedFiltersValues = []; 
    // for each attribute check the corresponding attribute filters selected 
    filterAttributes.each(function(){ 
     if(this.checked) 
     { 
      var currentFilter = $(this); 
      console.log(currentFilter); 
      selectedFiltersValues.push("[data-" + currentFilter.attr('name') + "='" + currentFilter.val() + "']"); 
      filteredProducts = filteredProducts.filter(selectedFiltersValues.join(',')); 
     } 
    }); 
    //console.log(filteredProducts.parent()); 
    filteredProducts.parent().show(); 

    }; 

filteredProducts.parent().show(); Diese Zeile zeigt mir alle Ergebnisse, die ich will nicht einmal.

wenn ich die filteredProductsconsole.log, zeigt es mir die, die ich brauche, was soll ich tun, um mir die, die zu zeigen, dass filterProducts enthält?

Hinweis: Jedes Mal, wenn die Seite geladen wird, werden alle Elemente angezeigt.Wenn jemand etwas anderes benötigt, lass es mich wissen.

Antwort

1

Sie könnten etwas tun, wie dieses

filteredProducts.parent().show(); 
    $('ul.products').children().not(filteredProducts).hide(); 

Was tatsächlich passiert ist, dass es das übergeordnete Element und alle es zeigt, ist Elemente Kind als well.You für die Auswahl jeder außer der eigenen .not() in jquery api verwenden könnte Sie wollen und dann Verbergen auf diese ausgewählten Elemente.Ich weiß nicht über andere jquery Funktion, um die ausgewählten Elemente direkt auszugeben, aber für Ihre Situation passt diese Problemumgehung am besten.

Ich bin offen für alle anderen Vorschläge.

Verwandte Themen