Ho hackerato insieme una tabella di elenco delle attività di esempio di base con HTML e utilizzando jQuery. Ho allegato alcune on change
eventi alla mia Filter DropDown Selection Fields
Come combinare più filtri per filtrare le righe di attività utilizzando jQuery?
Demo: http://codepen.io/jasondavis/pen/MwOwMX?editors=101
ho un filtro di selezione campo per ciascuno di essi:
- Assegnato utente
- Stato attività
- Milestone
- prioritarie
- Tag
Indipendentemente tutti lavorano per ottenere il lavoro fatto nel filtrare i risultati non corrispondenti dal mio Elenco attività Tabella.
per ogni attività fila, devo conservare il valore di ciascuna opzione filtrabile in un Data Attribute
come in questo esempio Task Row HTML:
<tr id="task-3"
class="task-list-row"
data-task-id="3"
data-assigned-user="Donald"
data-status="Not Started"
data-milestone="Milestone 1"
data-priority="Low"
data-tags="Tag 3">
<td>Task title 3</td>
<td>11/16/2014</td>
<td>02/29/2015</td>
<td>Low</td>
<td>Milestone 1</td>
<td>Donald</td>
<td>Tag 3</td>
</tr>
modo che il testo vero e proprio per la riga Task non importa perché il compito la riga non mostrerà tutte le proprietà. Ciò che conta è il valore memorizzato negli attributi dei dati della riga di attività.
Una task riga/record con un Miledstone
set per Milestone 2
avrà un attributo di dati come questo data-milestone="Milestone 2"
Un esempio JavaScript/jQuery codice di filtro:
// Task Milestone Dropdown Filter
$('#milestone-filter').on('change', function() {
var taskMilestone = this.value;
if(taskMilestone === 'None'){
$('.task-list-row').hide().filter(function() {
return $(this).data('milestone') != taskMilestone;
}).show();
}else{
$('.task-list-row').hide().filter(function() {
return $(this).data('milestone') == taskMilestone;
}).show();
}
});
Così come ho già detto. Posso far funzionare ognuno dei miei "FIlters" da solo, tuttavia, non appena cerco di applicare più di un filtro alla volta, non funzionerà con questo codice corrente.
Apprezzerei qualsiasi aiuto nella modifica del codice per creare un esempio di multi-filtro di lavoro per favore?
mio demo attuale è qui: http://codepen.io/jasondavis/pen/MwOwMX?editors=101
Aggiornamento Test 2
Dopo qualche pensiero, penso che forse ho bisogno di memorizzare tutti i valori di filtro corrente in variabili e poi su ogni evento change
invece di questo:
return $(this).data('milestone') != taskMilestone;
Dovrebbe invece essere più simile a questo ...
return $(this).data('milestone') != taskMilestone
&& $(this).data('priority') != taskPriority
&& $(this).data('tags') != taskTags
&& .... for all filters;
Suona bene?
Non importa, ci ho provato senza fortuna!
questo è semplicemente geniale! Non sono mai riuscito a trovare una soluzione così elegante e apparentemente nessun altro su SO poteva neanche! Quindi, grazie mille, sarà molto utile nella mia app di Project Management su cui sto lavorando. – JasonDavis
Se ti senti come una sfida sarebbe bello aggiungere un nuovo filtro per le date di scadenza. Qualcosa in cui le opzioni sarebbero qualcosa come la data di scadenza dovuta entro 30 giorni, 7 giorni, ecc ... così come la data di scadenza scaduta da oggi. Ovviamente non sei obbligato, ma se ti piace risolvere questo tipo di problemi è un'altra cosa che volevo fare anche un filtro e penso che potrebbe non essere difficile. qualche idea? Grazie per la soluzione di cui sopra davvero apprezzare il tempo e lo sforzo è fantastico! – JasonDavis
@JasonDavis Prego! A proposito del filtro della data di scadenza, dai un'occhiata a [moment.js] (http://momentjs.com/), è una libreria meravigliosa per la manipolazione di data/ora. Prova a postare ciò che hai fino a una nuova domanda e forse può iniziare da quello –