2010-08-06 27 views
8

Estoy tratando de ocultar/mostrar columnas en una tabla en función de las elecciones de los usuarios durante el tiempo de ejecución. He definido dos clases CSS:¿Es posible ocultar/mostrar columnas de tabla cambiando solo la clase CSS en el elemento col?

.hide { visibility: collapse; } 

.show { visibility: visible; } 

traté de establecer estos estilos en el elemento <col> correspondientes a la columna Quiero ocultar/mostrar:

<table> 
    <thead> 
    <tr> 
     <th>Column 1</th> 
     <th>Column 2</th> 
     ... 
    </tr> 
    </thead> 
    <colgroup> 
    <col class="hide"> 
    <col> 
    ... 
    </colgroup> 
    <tbody> 
    <tr> 
     <td>Row 1 Column 1</td> 
     <td>Row 1 Column 2</td> 
    </tr> 
    ... 
    </tbody> 
</table> 

Sin embargo, sólo parece funcionar en Firefox pero no en Safari o Chrome. ¿Safari y Chrome requieren un manejo especial? Intento evitar recorrer todas las filas y modificar la clase/estilo de CSS en cada <td> correspondiente, y el número de columnas en la tabla es grande, por lo que también me gustaría evitar crear una clase de CSS por columna. ¿Hay alguna forma confiable de ocultar/mostrar columnas en los navegadores simplemente cambiando la clase CSS en <col>?

+0

relacionadas: http://stackoverflow.com/questions/3077250/ie7-table-cells-made-invisible-by-css-can-be-made-visible-by-later-class-chang – BalusC

Respuesta

0

Bueno Chrome no es realmente un navegador ampliamente compatible por lo que técnicamente a nadie le importa si no funciona en Chrome (aún no de todos modos). Pero, ¿por qué no configurar la visibilidad como oculta?

td { 
    width:100px; 
    height:500px; 
    border:solid 1px #000000; 
} 
td#one { 
     visibility:hidden; 
    background:#ff0000; 
} 
td#two { 
    visibility:hidden; 
    background:#00ff00; 
} 
td#three { 
     visibility:hidden; 
    background:#0000ff; 
} 
+0

Pero a partir de 2017 Chrome tiene el 60% de la cuota de mercado ... –

3

Parece que los navegadores basados ​​en Webkit todavía no admiten col {visibility: collapse}. http://www.quirksmode.org/css/columns.html es bastante útil para verificar el soporte de la columna de la tabla.

Actualmente estoy jugando con:

/* Skipping 1st column: labels */ 
table.hidecol2 th:nth-child(2), 
table.hidecol2 td:nth-child(2), 
table.hidecol3 th:nth-child(3), 
table.hidecol3 td:nth-child(3) { 
    display: none; 
} 

pero luego puede permitirse el lujo de no preocuparse por el IE. Solo ten cuidado de que vas a tener que modificar cualquier colspans y filas de filas. Use tr: first-child, tr: not (: first-child) etc. para seleccionar/evitar según sea necesario.

+0

Lamentablemente, 4 años después aún no hay soporte. El problema de Chromium en esto: https://code.google.com/p/chromium/issues/detail?id=174167 – ToniTornado

1

Creo que la mejor opción es usar colgroup en su tabla y modificar los atributos de css para mostrar u ocultar una columna o un conjunto de columnas. Por ejemplo, podría ocultar las primeras cinco columnas, como a continuación:

<table> 
     <colgroup> 
      <col id="filterTableColgroup" span="5"> 
     </colgroup> 
     <thead> 
     <tr> 
      <th>...</th> 
     </tr> ... 

Y deberá modificar el atributo por jQuery, como a continuación:

$("#filterTableColgroup").css('visibility', 'collapse'); 
+1

Esto no funciona en Chrome todavía. Es mediados de 2016 y estoy usando Chrome 52. – Dai

Cuestiones relacionadas