2011-03-28 31 views
19

Necesito cambiar dinámicamente el orden de las columnas en una tabla en html/js, ¿me puede decir cómo hacerlo? ¡Gracias a todos!Cambiar columnas de la tabla orden

+0

columnas cambiantes es duro, cambiar filas es fácil –

+0

Use un plugin de tabla. http://plugins.jquery.com/projects/plugins/tables –

+1

Deberías dar más detalles aquí. ¿Esperas permitir a los usuarios arrastrar y soltar el orden de las columnas? ¿Qué tan flexible necesita que sea? – jessegavin

Respuesta

25

Si sólo necesita simplemente mover una columna sin ningún tipo de animación de arrastrar y soltar de fantasía, la siguiente JS debe hacer el truco:

<script type="text/javascript"> 
    $(function() { 
     jQuery.each($("table tr"), function() { 
      $(this).children(":eq(1)").after($(this).children(":eq(0)")); 
     }); 
    }); 
</script> 

Sustitución de los números como sea necesario. El concepto funciona

Parece que escribir esto como un trazador de líneas no es realmente posible. incluyendo td en el selector, incluso con el selector de filas parece contener cada td en un índice separado, ignorando las filas.

Un plugin de cuadrícula jQuery debería ser el caso. Aunque no tengo experiencia con dichos complementos.

+0

Hmm ... no para noquear esta respuesta, pero ¿por qué el cambio de respuesta correcta? Daría la mía al borde de la reutilización. – typeof

+1

esto no está mal, solo tenga en cuenta que no funcionará si hay celdas combinadas (es decir: rowspan> 1) – Benja

+0

Hice un cambio menor a este, en lugar de usar un selector en los niños, es mucho más fácil encadenar .eq (1) por ejemplo. Esto hace que sea más fácil pasar argumentos :) –

29

columnas en movimiento no es tan difícil:

Se puede utilizar esta función:

jQuery.moveColumn = function (table, from, to) { 
    var rows = jQuery('tr', table); 
    var cols; 
    rows.each(function() { 
     cols = jQuery(this).children('th, td'); 
     cols.eq(from).detach().insertBefore(cols.eq(to)); 
    }); 
} 

Entonces invocarlo así:

var tbl = jQuery('table'); 
jQuery.moveColumn(tbl, 2, 0); 

Por lo tanto, si se conoce el índice de la columna y el índice del lugar donde desea ubicarlo (basado en cero), puede mover las columnas, incluidos los encabezados de columna.

Aquí es el jsFiddle de trabajo: http://jsfiddle.net/Qsys7/1/

+0

como otras soluciones, podría ser suficiente, pero no funciona con las celdas combinadas (es decir, rowspan> 1) – Benja

+0

Lo intenté, no funciona cuando intento hacer un tbl, 0,6 (mover la primera columna al último lugar). En cambio, estoy obligado a hacer 1,0 => 2,1 => 3,2 ... 6,5 para poner la primera columna en lastp lace – WizLiz

+0

Modifiqué tu código para permitir mover las columnas a la última columna. Ver: http://jsfiddle.net/fyq9em36/ – Keeper

0

Aquí hay un plugin de jQuery que acabo de escribir para cambiar el contenido de dos columnas:

$.fn.switchColumns = function (col1, col2) { 
    var $this = this, 
     $tr = $this.find('tr'); 

    $tr.each(function(i, ele){ 
     var $ele = $(ele), 
      $td = $ele.find('td'), 
      $tdt; 

     $tdt = $td.eq(col1).clone(); 
     $td.eq(col1).html($td.eq(col2).html()); 
     $td.eq(col2).html($tdt.html()); 
    }); 
}; 

See example →

+0

Probado esto, en realidad solo cambia el contenido de las celdas, no las columnas. Esto no funciona si los elementos td son importantes para el contenido que contienen. El concepto funciona aunque no tenga esos requisitos. –

+0

Mover el contenido de las columnas no es tan inteligente si tiene la propiedad 'width' u otras propiedades de estilo en las columnas. Acabas terminando con la columna ancha siendo mucho más estrecha, y viceversa. – cartbeforehorse

Cuestiones relacionadas