2014-07-08 10 views
14

Utilizzo Bootstrap e una tabella a strisce che può essere filtrata selezionando alcune opzioni in un modulo. Javascript interpreta gli input del modulo e nasconde le righe dalla tabella che non corrispondono ai criteri selezionati.Riapplicare la striping della tabella dopo aver nascosto le righe (Twitter Bootstrap)

Tuttavia, questo rompe lo striping del tavolo sulla tabella a seconda di quali righe sono nascoste (righe grigie accanto a righe grigie, righe bianche accanto a righe bianche).

Mi piacerebbe riapplicare lo striping in base a quali righe sono visibili dopo aver filtrato i risultati. Come posso fare questo?

L'uso di .remove() sulle righe della tabella non è un'opzione, perché potrebbe essere necessario visualizzarli di nuovo se cambiano i criteri del filtro e sto cercando di evitare l'utilizzo di AJAX per aggiornare la tabella in modo dinamico in base agli input del filtro (Mi piacerebbe attenermi a nascondere elementi DOM).

Qualsiasi aiuto è apprezzato! Posso chiarire la domanda se necessario :)

+2

Davvero un buon articolo su questo argomento, che offre una serie di soluzioni: http://christianheilmann.com/2013/12/12/zebra-tables-using-nth-child-and-hidden-rows/ –

risposta

4

Sì, questa è sicuramente una delle parti fastidiose di striping della tabella. La parte migliore del coraggio qui è probabilmente solo per riapplicare la striping con jQuery dopo ogni aggiornamento:

$("tr:not(.hidden)").each(function (index) { 
    $(this).toggleClass("stripe", !!(index & 1)); 
}); 
+0

Grazie! Ci proverò e tornerò da te. – Andrew

+1

Sì, ci sono soluzioni in cui si spostano le righe, in cui si hanno trucchi CSS davvero pazzeschi, ma in questo caso, si sa quando gli aggiornamenti stanno accadendo, quindi vorrei solo fare la cosa noiosa. :) –

5

risposta di Anthony non ha funzionato per me. Innanzitutto, non nasconde la classe della tabella Bootstrap table-striped e, in secondo luogo, non esiste (o almeno non sembra) una classe integrata stripe per le righe della tabella.

Ecco il mio approccio, in cui ho filtrato le righe in una tabella con un ID di "report".

Ecco una versione da usare se si definisce la classe "stripe" per <tr> elementi:

// un-stripe table, since bootstrap striping doesn't work for filtered rows 
$("table#reports").removeClass("table-striped"); 

// now add stripes to alternating rows 
$rows.each(function (index) { 
    // but first remove class that may have been added by previous changes 
    $(this).removeClass("stripe"); 
    if (index % 2 == 0) { 
    $(this).addClass("stripe"); 
    } 
}); 

Se siete troppo pigri per definire la "striscia" classe CSS allora ecco una rapida & versione sporca:

// un-stripe table, since bootstrap striping doesn't work for filtered rows 
$("table#reports").removeClass("table-striped"); 

// now add stripes to alternating rows 
$rows.each(function (index) { 
    // but first remove color that may have been added by previous changes: 
    $(this).css("background-color", "inherit"); 
    if (index % 2 == 0) { 
    $(this).css("background-color", "#f9f9f9"); 
    } 
}); 
+0

Quanto sopra ucciderà la classe hover che può essere applicata usando '.table-hover', perché lo stile in linea ha la precedenza. Sicuramente opterei per l'utilizzo di una classe. – Mike

+0

Nel primo blocco di codice si aggiunge una seconda istanza di classe '.stripe' a ogni altra riga, poiché l'hai già aggiunta a tutte le righe precedenti. Il modo più efficiente di farlo, e non di romperlo, è quello di rimuovere quel primo '$ (questo) .addClass (" stripe ");' prima dell'istruzione if. In questo modo stai solo aggiungendo la classe a ciò che serve, piuttosto che aggiungerla a tutto e rimuoverla da ciò che non è necessario, cosa che io credo che tu stia cercando di fare. – Mike

+0

@mikemike: whoops -questo primo addClass ha lo scopo di rimuovere la classe ...: svuotato: – iconoclast

Problemi correlati