Como esconder colunas na tabela HTML?


93

Criei uma tabela em ASPX. Quero ocultar uma das colunas com base no requisito, mas não há nenhum atributo como visiblena construção da tabela HTML. Como posso resolver meu problema?

Respostas:


169

Você precisa usar a folha de estilo para este propósito.

<td style="display:none;">

1
que tal apenas a primeira coluna usando css de html
office 302

como devo adicionar estilo a ele quando estou fazendo tabela usando javascript createelement (td);
escritório 302,

1
@ office302 Aplicar este estilo apenas ao primeiro td? Ou você quer usar apenas CSS - Isso você pode fazer algo assimtd:first-child { display:none; }
Anuraj 09/09/2015

@Anuraj deve ser notado que: primeiro filho etc. são suportados> IE 11 e Edge, bom de qualquer maneira
Vitaliy Terziev

87

Você pode usar o nth-childseletor CSS para ocultar uma coluna inteira:

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

Isso funciona supondo que uma célula da coluna N (seja a thou td) é sempre o enésimo elemento filho de sua linha.

Aqui está uma demonstração.


Se você quiser que o número da coluna seja dinâmico, pode fazer isso usando querySelectorAllou qualquer estrutura que apresente funcionalidade semelhante, como jQueryaqui:

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

Demonstração com jQuery

(A solução jQuery também funciona em navegadores legados que não oferecem suportenth-child ).


1
Isso pode ter efeitos colaterais prejudiciais, veja minha resposta abaixo para uma solução aprimorada.
Rick Smith,

@RickSmith Bom argumento. Atualizei meu post para evitar o problema de outra forma (usando o seletor filho).
Kos,

o seletor de crianças é definitivamente melhor. Boa resposta.
Rick Smith,

Boa solução, mas precisa de um pouco mais de consideração no caso do colspan.
Cinoss

30

você também pode usar:

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

A diferença entre eles que "oculta" esconde a célula, mas mantém o espaço, mas com "colapso" o espaço não é mantido como exibição: nenhum. Isso é significativo ao ocultar uma coluna ou linha inteira.


1
Descobri que, para as tags div, o colapso também mantém o espaço. Para as tags div, você teria que usar display: none; para realmente entrar em colapso e não segurar o espaço.
Dov Miller

5
visibility: collapseé projetado especificamente para lidar com a exibição / ocultação da célula, uma vez que há uma diferença ao recalcular a largura / altura da célula entre isso e display:none. Consulte developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
SteveB

28

A resposta de Kos está quase certa, mas pode ter efeitos colaterais prejudiciais. Isso é mais correto:

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

CSS (Cascading Style Sheets) colocará atributos em cascata para todos os seus filhos. Isso significa que *:nth-child(1)irá ocultar o primeiro tdde cada tr E ocultar o primeiro elemento de todos os tdfilhos. Se algum de seus tdtiver coisas como botões, ícones, entradas ou seleções, o primeiro será escondido (woops!).

Mesmo se você não atualmente tem coisas que vão ser escondidas, imagem sua frustração na estrada se você precisa adicionar um. Não castigue o seu futuro eu assim, vai ser chato depurar!

Minha resposta só vai esconder a primeira tde them todos trem #myTablemanter seus outros elementos de segurança.




2

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

use .hideFullColumn na tabela e .hidecol na tabela. Você não precisa adicionar classe em td individualmente, pois será um problema porque o índice pode não estar em mente para cada td.


1

Você também pode fazer o que vs dev sugere programaticamente atribuindo o estilo com Javascript, iterando através das colunas e definindo o elemento td em um índice específico para ter esse estilo.


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
Espero que isso resolva o problema, mas acrescente uma explicação do seu código para que o usuário compreenda perfeitamente o que ele realmente deseja.
Jaimil Patel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.