Come nascondere le colonne nella tabella HTML?


93

Ho creato una tabella in ASPX. Voglio nascondere una delle colonne in base al requisito ma non ci sono attributi come visiblenella creazione di tabelle HTML. Come posso risolvere il mio problema?

Risposte:


171

È necessario utilizzare il foglio di stile per questo scopo.

<td style="display:none;">

1
che dire solo della prima colonna usando css di html
ufficio 302

come dovrei aggiungere uno stile quando creo una tabella usando javascript createelement (td);
ufficio 302

1
@ office302 Applicare questo stile solo al primo td? Oppure vuoi usare solo CSS - Puoi fare qualcosa del generetd:first-child { display:none; }
Anuraj

@Anuraj va notato che: primo figlio ecc. Sono supportati> IE 11 e Edge, comunque buono
Vitaliy Terziev

88

Puoi utilizzare il nth-childselettore CSS per nascondere un'intera colonna:

#myTable tr > *:nth-child(2) {
    display: none;
}

Questo funziona assumendo che una cella della colonna N (sia essa un thotd ) sia sempre l'ennesimo elemento figlio della sua riga.

Ecco una demo.


Se vuoi che il numero di colonna sia dinamico, puoi farlo utilizzando querySelectorAllo qualsiasi framework che presenti funzionalità simili, come jQueryqui:

$('#myTable tr > *:nth-child(2)').hide();

Demo con jQuery

(La soluzione jQuery funziona anche su browser legacy che non supportanonth-child ).


1
Questo può avere effetti collaterali dannosi, vedere la mia risposta di seguito per una soluzione migliore.
Rick Smith

@ RickSmith Buon punto. Aggiornato il mio post per evitare il problema in un altro modo (utilizzando il selettore figlio).
Kos

il selettore di bambini è decisamente migliore. Buona risposta.
Rick Smith

Bella soluzione ma necessita di un po 'più di considerazione sul caso Colspan.
Cinoss

30

puoi anche usare:

<td style="visibility:hidden;">
or
<td style="visibility:collapse;">

La differenza tra loro che "nascosto" nasconde la cella ma trattiene lo spazio ma con "collassa" lo spazio non si tiene come display: nessuno. Ciò è significativo quando si nasconde un'intera colonna o riga.


1
Ho scoperto che per i tag div anche la compressione conterrà lo spazio. Per i tag div dovresti usare display: none; per collassare veramente e non trattenere lo spazio.
Dov Miller

5
visibility: collapseè progettato specificamente per gestire la visualizzazione / occultamento delle celle, poiché c'è una differenza quando si ricalcola la larghezza / altezza della cella tra questo e display:none. Vedi developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
SteveB

28

La risposta di Kos è quasi giusta, ma può avere effetti collaterali dannosi. Questo è più corretto:

#myTable tr td:nth-child(1), #myTable th:nth-child(1) {
    display: none;
}

CSS (Cascading Style Sheets) distribuirà attributi a cascata a tutti i suoi figli. Ciò significa che *:nth-child(1)nasconderà il primo tddi ogni tr AND nasconderà il primo elemento di tutti i tdfigli. Se uno dei tuoi filetd ha cose come pulsanti, icone, ingressi o selezioni, il primo sarà nascosto (woops!).

Anche se non si attualmente dispone di cose che sarà nascosto, l'immagine della vostra frustrazione lungo la strada se avete bisogno di aggiungere uno. Non punire il tuo sé futuro in questo modo, sarà un dolore fare il debug!

La mia risposta nasconderà solo il primo tde thsu tutti trper #myTablemantenere gli altri elementi al sicuro.




2

<style>
.hideFullColumn tr > .hidecol
{
    display:none;
}
</style>

usa .hideFullColumn nella tabella e .hidecol in th. Non è necessario aggiungere la classe in td individualmente poiché sarà un problema perché index potrebbe non essere in mente per ogni td.


1

Puoi anche fare ciò che vs dev suggerisce a livello di programmazione assegnando lo stile con Javascript iterando attraverso le colonne e impostando l'elemento td su un indice specifico per avere quello stile.


0
<!doctype html>
<html lang="en">
<head>
<style id="myStyleSheet">
...
</style>

var column = 3;
var styleSheet = document.getElementById("myStyleSheet").sheet;
var rule = "table  tr td:nth-child("+ column +"),table th:nth-child("+ column +") 
{display: none}";
styleSheet.insertRule(rule);

2
Spero che risolva il problema, ma per favore aggiungi una spiegazione del tuo codice con esso in modo che l'utente possa capire perfettamente cosa vuole veramente.
Jaimil Patel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.