Tengo una tabla HTML con varias columnas y necesito implementar un selector de columnas usando jquery. Cuando un usuario hace clic en una casilla de verificación, quiero ocultar / mostrar la columna correspondiente en la tabla. Me gustaría hacer esto sin adjuntar una clase a cada td en la tabla, ¿hay alguna manera de seleccionar una columna completa usando jquery? A continuación se muestra un ejemplo del 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>
Respuestas:
Personalmente, iría con el enfoque class-on-each-td / th / col. Luego puede activar y desactivar columnas usando una sola escritura en className en el contenedor, asumiendo reglas de estilo como:
Esto va a ser más rápido que cualquier enfoque de bucle JS; para tablas realmente largas puede marcar una diferencia significativa en la capacidad de respuesta.
Si puede salirse con la suya sin admitir IE6, podría usar selectores de adyacencia para evitar tener que agregar los atributos de clase a tds. O, alternativamente, si su preocupación es hacer que el marcado sea más limpio, puede agregarlos desde JavaScript automáticamente en un paso de inicialización.
fuente
.hidden {display:none;}
y usé.addClass('hidden')
y.removeClass('hidden')
que fue un poco más rápido que.hide()
y.show()
.Una línea de código usando jQuery que oculta la segunda columna:
Si su tabla tiene encabezado (th), use esto:
Fuente: Ocultar una columna de tabla con una sola línea de código jQuery
jsFiddle para probar el código: http://jsfiddle.net/mgMem/1/
Si quieres ver un buen caso de uso, mira mi publicación de blog:
Ocultar una columna de tabla y colorear las filas según el valor con jQuery .
fuente
podrías usar colgroups:
su guión podría cambiar solo la
<col>
clase de deseo .fuente
$('table > colgroup > col.yourClassHere')
selector jQuery, aún puede configurar algo como el color de fondo de toda la columna, pero ya no puede alternar la visibilidad de la columna. Los navegadores probados fueron MSIE 11 , Safari 5 , Chromium 44 , Opera 12 , Mozilla SeaMonkey 2.40 , Mozilla Firefox 43 . "La mayoría de los atributos en HTML 4.01 no son compatibles con HTML5" - vea aquí .Lo siguiente debería hacerlo:
Este es un código no probado, pero el principio es que elige la celda de la tabla en cada fila que corresponde al índice elegido extraído del nombre de la casilla de verificación. Por supuesto, podría limitar los selectores con una clase o una ID.
fuente
Aquí hay una respuesta un poco más completa que proporciona cierta interacción del usuario por columna. Si esto va a ser una experiencia dinámica, debe haber un botón de clic en cada columna que indique la capacidad de ocultar la columna, y luego una forma de restaurar columnas previamente ocultas.
Se vería así en JavaScript:
Para respaldar esto, agregaremos algunas marcas a la tabla. En cada encabezado de columna, podemos agregar algo como esto para proporcionar un indicador visual de algo en el que se pueda hacer clic
Permitiremos al usuario restaurar columnas a través de un enlace en el pie de página de la tabla. Si no es persistente de forma predeterminada, entonces activarlo dinámicamente en el encabezado podría moverse alrededor de la mesa, pero realmente puede colocarlo en cualquier lugar que desee:
Esa es la funcionalidad básica. Aquí hay una demostración a continuación con un par de cosas más desarrolladas. También puede agregar una información sobre herramientas al botón para ayudar a aclarar su propósito, diseñar el botón un poco más orgánicamente en el encabezado de una tabla y contraer el ancho de la columna para agregar algunas animaciones CSS (algo inestables) para hacer la transición un poco menos asustadizo.
Demostración de trabajo en jsFiddle & Stack Snippets:
Mostrar fragmento de código
fuente
$(document).ready
pero no tengo suerte.hide-col
para eliminar columnas, pero también se puede usar para indicar el estado, por lo que podría: agregar.hide-col
a cadatd
&tr
al representar el html y listo. O si desea agregarlo en menos lugares, póngalo en el encabezado (ese estado tendrá que ir a algún lado), y en init, úselo para ocultar ese índice de columna en los elementos secundarios. Actualmente, el código solo está escuchando la posición al hacer clic, pero también podría modificarse para buscar la posición de la clase. Además, feliz día de Turquíaclass='hide-col'
lugar que desee en su html (probablemente en elthead > tr > th
sentido más lógico y se recuperará para asegurarse de que oculta todas las celdas en esa columna y también muestra dinámicamente el pie de página de restauración)Y, por supuesto, la única forma de CSS para los navegadores que admiten
nth-child
:table td:nth-child(2) { display: none; }
Esto es para IE9 y más reciente.
Para su caso de uso, necesitaría varias clases para ocultar las columnas:
ect ...
fuente
Lo siguiente se basa en el código de Eran, con algunos cambios menores. Lo probé y parece funcionar bien en Firefox 3, IE7.
fuente
fuente
Sin clase? Puede usar la etiqueta entonces:
Y para mostrarles use:
fuente