La manipolazione del DOM è troppo lenta per "poche migliaia di voci". Supponendo che tu abbia davvero una buona ragione per cui non stai ricevendo il server per fare il filtraggio, la soluzione migliore che ho trovato è quella di utilizzare le trasformazioni XSL lato client su dati conservati come XML.
Le trasformazioni stesse sono molto veloci anche su serie di dati ragionevolmente grandi. Alla fine assegnerai i risultati alla proprietà innerHTML di un DIV contenente dove vuoi che appaia la tabella. L'uso di innerHTML per grandi cambiamenti nel DOM è molto più rapido della manipolazione del DOM con Javascript.
Edit: Risposte alle osservazioni di Justin Johnson: -
Se il set di dati è che di grandi dimensioni, l'XML è potenzialmente sarà bestiale di grandi dimensioni.
Nota Ho già effettuato la dichiarazione di non responsabilità nel mio primo paragrafo riguardante l'arruolamento dei server. Potrebbe esserci un caso qui per cambiare il design e fare un uso ragionevole di AJAX, o semplicemente non tentare di mostrare molti dati contemporaneamente. Tuttavia sto facendo del mio meglio per rispondere alla domanda posta.
Vale anche la pena considerare che "beastly large" è almeno una funzione della larghezza di banda. In una web application intranet ben collegata la larghezza di banda non è così elevata. Inoltre ho visto e utilizzato implementazioni che creano e riutilizzano l'XML memorizzato nella cache nel tempo.
Inoltre, se XML viene convertito in un oggetto DOM, come va meglio?
C'è una grande differenza tra la tecnica che propongo e la manipolazione DOM diretta da Javascript. Considerare quando il codice in javascript modifica il DOM il motore sottostante non ha modo di sapere che altre modifiche stanno per essere seguite immediatamente, né può essere sicuro che il javascript non esaminerà immediatamente altre proprietà del DOM. Quindi, quando viene apportata una modifica al DOM tramite Javascript, il browser deve assicurarsi di aggiornare tutti i tipi di altre proprietà in modo che siano coerenti con un rendering completato.
Tuttavia, quando innerHTML viene assegnato una stringa HTML di grandi dimensioni, il browser può creare tranquillamente un intero gruppo di oggetti DOM senza eseguire alcun ricalcolo, può rinviare un aggiornamento di zillion a vari valori di proprietà fino a quando non viene creato l'intero DOM. Quindi per i cambiamenti su larga scala l'innerHTML soffierà la manipolazione diretta del DOM fuori dall'acqua.
Questa è una buona idea. Potrei finire usando la navigazione basata sulla pagina lato client per mantenere la dimensione della pagina (visiva) verso il basso, che mi darà un limite superiore gestibile per il numero di elementi visibili. – SoftMemes