2012-06-06 28 views
6

¿Hay alguna manera de autoesificar la altura de la tabla HTML en función del contenido? También si se trata de una celda (o celdas) al lado de una celda contigua con filas múltiples.Altura de celda de la tabla HTML de tamaño automático en función del contenido cuando está involucrado rowspan

E.g. si tengo una tabla como la siguiente (célula de la derecha tiene ROWSPAN = "2" y la altura del contenido de la celda = 600px, en cada celda de la altura izquierdo del contenido de la celda = 150 píxeles):

Cells evenly spaces

hay un espacio entre los permisos de 2 celdas de la izquierda porque las celdas autoescalan su altura. Me gustaría que se vea como esto:

Cell height adjusted to content

donde los mejores células colapsan de forma automática a la altura del contenido de células. ¿Hay alguna forma de lograr esto?

+0

¿está usando jquery (o cualquier otro framework de JavaScript) o solo javascript? –

+0

Plain JS. Pero no creo que la asignación directa de altura cambie el tamaño de la celda en este escenario –

+0

hará la alineación directa de las células, pero el problema es que si sabe cuántas celdas habrá (para escribir el código) o las celdas se crearán dinámicamente. –

Respuesta

2

Esto establece la última fila de celdas a la altura correcta (demo):

function grow(td) { 
    var table, target, high, low, mid; 

    td = $(td); 
    table = td.closest('table'); 
    target = table.height(); 
    low = td.height(); 

    // find initial high 
    high = low; 
    while (table.height() <= target) { 
     td.height(high *= 2); 
    } 

    // binary search! 
    while (low + 1 < high) { 
     mid = low + Math.floor((high - low)/2); 
     td.height(mid); 
     if (table.height() > target) { 
      high = mid; 
     } else { 
      low = mid; 
     } 
    } 

    td.height(low); 
} 

$('tr:last-child td').each(function() { grow(this); }); 

Debe ser trivial convertir esto en JavaScript simple.


Actualización: Para tablas más complicadas, tendrá que sustituir la última línea con esto (demo):

$.each($('td').get().reverse(), function() { grow(this); }); 

La idea es llamar grow() en cada célula, comenzando con la última fila y trabajando hacia arriba.

+0

¡Parece prometedor, gracias! Lo probaré cuando llegue a mi computadora portátil dev –

+0

Todavía estoy experimentando con mover esto a JS simple vainilla. ¿Funcionará esto si el diseño de la mesa es un poco más complicado? Siempre tendrá 2 columnas, pero algunas pueden abarcar ambas columnas y no una, pero más celdas pueden abarcar varias filas. –

+0

@Trekstuff Por favor, mira mi actualización. –

1

tabla considerando id = "mitabla" sería:

$("#mytable").find("td").each(function(){ 

    var ContentHeight = $($(this).html()).height(); 
    $(this).height(ContentHeight); 

}); 
+0

Gracias por la pronta respuesta. No usamos jQuery; Podría hacer lo mismo en el JavaScript plano simple, pero no creo que simplemente asignar el valor de altura a la celda funcione en este escenario. ¿O estoy equivocado? –

+0

Hola, ¿tienes alguna actualización sobre este tema? Estoy atascado :( –

0

al final de la página crear un código javascript y dejar que lo haga por usted:

<script type="text/javascript"> 
document.getElementById("idOfTd").style.height="100px"; 
</script> 
+0

esto debería funcionar –

+0

¿Lo has probado? ¿Realmente reduce visiblemente la altura de la celda superior izquierda en IE o FireFox? –

+0

sí antes de jquery estaba usando este método –

0

pienso es mejor crear así http://jsfiddle.net/miqdad/w9QYB/

+0

http://jsfiddle.net/miqdad/w9QYB/1/ –

+0

Sí , Me encontré con una solución de tabla en tabla, pero actualmente el diseño de la tabla se genera mediante el código del lado del servidor y cambiarlo implica un esfuerzo no pequeño. Necesito encontrar una solución del lado del cliente que funcione con el diseño existente. –

+0

¿Puede publicar el código que obtiene en la fuente de vista del navegador? –

Cuestiones relacionadas