Sto utilizzando la libreria http://mixitup.io/ per fornire il filtro per il mio semplice elenco di elementi. Tutto funziona bene, tranne una cosa: filtri a più livelli di cui ho bisogno.Più filtri in jQuery
Ho due tipi di filtri, uno è basato su "tipo" e uno su "produttore". Quindi, diciamo che voglio mostrare "typeA" da "manufacturer1", o qualche altra combinazione. Gli articoli dovrebbero soddisfare entrambi quelli da mostrare sulla lista.
Non riesco a farlo funzionare, e dopo aver fatto clic sui filtri, posso mostrare solo "typeA", che includerà tutti i produttori, o "manufacturerA", che mostra più tipi, ma non è quello che voglio .
Ho compreso il jsfiddle con il codice che ho adesso qui: http://jsfiddle.net/QtQnB/62/
Per i filtri, ho usato questo:
<div id="filter">
<span>Type</span>
<ul class="filter-list">
<li data-filter="lemon" class="filter" data-dimension="type"><a href="#">Lemon</a></li>
<li data-filter="orange" class="filter" data-dimension="type"><a href="#">Orange</a></li>
<li data-filter="apple" class="filter" data-dimension="type"><a href="#">Apple</a></li>
</ul>
<span>Manufacturer</span>
<ul class="filter-list">
<li data-filter="1" class="filter" data-dimension="manufacturer"><a href="#">1</a></li>
<li data-filter="2" class="filter" data-dimension="manufacturer"><a href="#">2</a></li>
</ul>
</div>
La lista voce è la seguente:
<ul id="grid">
<li class="mix lemon small">
<h3> small Lemon</h3>
<p>Some text here</p>
</li>
<li class="mix orange small">
<h3>small Orange</h3>
<p>Some text here</p>
</li>
<li class="mix apple medium">
<h3>medium Apple</h3>
<p>Some text here</p>
</li>
<li class="mix lemon big">
<h3>big Lemon</h3>
<p>Some text here</p>
</li>
<li class="mix orange medium">
<h3>medium Orange</h3>
<p>Some text here</p>
</li>
<li class="mix apple big">
<h3>big Apple</h3>
<p>Some text here</p>
</li>
</ul>
E poi il semplice codice js per inizializzare il mixitup, caricare gli elementi iniziali e provare ad applicare il filtro per più categorie con l'ultima riga, che non funziona:
$('#grid').mixitup({
showOnLoad: "2 orange",
filterLogic : 'and'});
var $filters = $('.filter-list').find('li'), dimensions = {type: 'orange', manufacturer: '2' };
$filters.on('click',function(){
var $t = $(this),
dimension = $t.attr('data-dimension'),
filter = $t.attr('data-filter');
console.info("dimension: "+dimension);
console.info("filter "+filter);
console.info("current filter for this cat: "+dimensions[dimension]);
dimensions[dimension] = filter;
console.info("selected filter for this cat: "+dimensions[dimension]);
console.info("type: "+ dimensions['type']);
console.info("manufacturer: "+ dimensions['manufacturer']);
var filterString = dimensions['type'] + " " + dimensions['manufacturer'];
$('#grid').mixitup('filter',filterString);
});
Ho esaminato altre domande e un esempio hanno fornito la libreria, ma semplicemente non riesco a farlo funzionare.
Grazie
Questo sembra essere. Ho anche trascorso un paio d'ore su questo ed ero davvero affranto dall'intera cosa "OH VIENI PERCHE 'NON LO STO FILTRATO". Grazie! Per qualche motivo, l'opzione showOnLoad non funziona correttamente, e devo fare '$ ('[data-filter =" orange "]'). Click();' '$ ('[data- filter = "2"] '). click(); ' Questo fa sì che il filtro carichi la mia lista iniziale di cui ho bisogno, dal momento che' showOnLoad: "orange 2" 'non fa nulla. – user2910402
La soluzione che ho trovato per il caricamento iniziale è chiamare il filtro subito dopo l'inizializzazione: [jsFiddle] (http://jsfiddle.net/QtQnB/64/). –