Eu tenho uma tabela HTML com várias colunas e preciso implementar um seletor de colunas usando jquery. Quando um usuário clica em uma caixa de seleção, quero ocultar / mostrar a coluna correspondente na tabela. Eu gostaria de fazer isso sem anexar uma classe a cada td da tabela. Existe uma maneira de selecionar uma coluna inteira usando o jquery? Abaixo está um exemplo do HTML.
<table>
<thead>
<tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>
<form>
<input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
<input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
<input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>
Respostas:
Pessoalmente, eu adotaria a abordagem class-on-each-td / th / col. Em seguida, você pode ativar e desativar as colunas usando uma única gravação em className no contêiner, assumindo regras de estilo como:
Isso será mais rápido do que qualquer abordagem de loop JS; para tabelas realmente longas, pode fazer uma diferença significativa na capacidade de resposta.
Se você conseguir se livrar do IE6, poderá usar seletores de adjacência para evitar a necessidade de adicionar os atributos de classe ao tds. Ou, como alternativa, se sua preocupação é tornar a marcação mais limpa, você pode adicioná-las automaticamente do JavaScript em uma etapa de inicialização.
fonte
.hidden {display:none;}
e usei.addClass('hidden')
e.removeClass('hidden')
que era um pouco mais rápido que.hide()
e.show()
.Uma linha de código usando jQuery que oculta a 2ª coluna:
Se sua tabela tiver cabeçalho (th), use o seguinte:
Origem: ocultar uma coluna da tabela com uma única linha de código jQuery
jsFiddle para testar o código: http://jsfiddle.net/mgMem/1/
Se você quiser ver um bom caso de uso, dê uma olhada no meu blog:
Oculte uma coluna da tabela e colore linhas com base no valor com o jQuery .
fonte
você poderia usar colgroups:
seu script pode mudar apenas a
<col>
classe desejada .fonte
$('table > colgroup > col.yourClassHere')
seletor jQuery, você ainda pode definir smth como a cor de fundo de toda a coluna, mas não poderá mais alternar a visibilidade da coluna. Os navegadores testados foram o MSIE 11 , Safari 5 , Chromium 44 , Opera 12 , Mozilla SeaMonkey 2.40 , Mozilla Firefox 43 . "A maioria dos atributos no HTML 4.01 não é suportada no HTML5" - veja aqui .O seguinte deve fazer isso:
Este é um código não testado, mas o princípio é que você escolhe a célula da tabela em cada linha que corresponde ao índice escolhido extraído do nome da caixa de seleção. Obviamente, você pode limitar os seletores com uma classe ou um ID.
fonte
Aqui está uma resposta um pouco mais completa que fornece alguma interação do usuário por coluna. Se for uma experiência dinâmica, é necessário haver uma alternância clicável em cada coluna que indique a capacidade de ocultar a coluna e, em seguida, uma maneira de restaurar colunas ocultas anteriormente.
Isso seria algo parecido com isto em JavaScript:
Para suportar isso, adicionaremos alguma marcação à tabela. Em cada cabeçalho da coluna, podemos adicionar algo assim para fornecer um indicador visual de algo clicável
Permitiremos que o usuário restaure colunas por meio de um link no rodapé da tabela. Se não for persistente por padrão, ativá-lo dinamicamente no cabeçalho pode se mover em torno da mesa, mas você pode realmente colocá-lo em qualquer lugar que desejar:
Essa é a funcionalidade básica. Aqui está uma demonstração abaixo com mais algumas coisas. Você também pode adicionar uma dica de ferramenta ao botão para ajudar a esclarecer sua finalidade, estilizar o botão um pouco mais organicamente no cabeçalho de uma tabela e reduzir a largura da coluna para adicionar algumas animações css (um pouco estranhas) para tornar a transição um pouco menos nervoso.
Demonstração de trabalho em jsFiddle & Stack Snippets:
Mostrar snippet de código
fonte
$(document).ready
mas tendo nenhuma sorte.hide-col
para remover colunas, mas também pode ser usado para indicar o estado, para que você possa - adicionar.hide-col
a cadatd
&tr
ao renderizar o html e pronto. Ou se você quiser adicioná-lo em menos lugares, coloque-o no cabeçalho (esse estado terá que ir a algum lugar) e, no init, use isso para ocultar esse índice de coluna entre os filhos. Atualmente, o código está apenas ouvindo a posição no clique, mas pode ser modificado para procurar também a posição da classe. Além disso, dia do peru felizclass='hide-col'
qualquer lugar que você quer em sua html (provavelmente em nothead > tr > th
faz mais sentido e vai pegar para ter certeza que esconde todas as células nessa coluna e mostrar dinamicamente rodapé restaurar bemE, claro, o CSS é apenas o caminho para navegadores compatíveis
nth-child
:table td:nth-child(2) { display: none; }
Isso é para o IE9 e mais recente.
Para seu caso de usuário, você precisará de várias classes para ocultar as colunas:
ect ...
fonte
O seguinte é baseado no código de Eran, com algumas pequenas alterações. Testei e parece funcionar bem no Firefox 3, IE7.
fonte
fonte
Sem aula? Você pode usar a tag então:
E para mostrar a eles, use:
fonte