La respuesta seleccionada aquí es una solución realmente agradable, pero tiene un error grave que es evidente en el violín JS original ( http://jsfiddle.net/bgrins/tzYbU/ ): intente arrastrar la fila más larga ( Dios lo bendiga, Sr. . Rosewater ), y el resto de los anchos de celda colapsan.
Esto significa que fijar los anchos de las celdas en la celda arrastrada no es suficiente; también debe corregir los anchos en la tabla.
$(function () {
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.width(cell.width());
});
$('#sortFixed tbody').sortable().disableSelection();
});
JS Fiddle: http://jsfiddle.net/rp4fV/3/
Esto soluciona el problema del colapso de la tabla después de arrastrar la primera columna, pero introduce una nueva: si cambia el contenido de la tabla, los tamaños de celda ahora se arreglan.
Para solucionar este problema al agregar o cambiar contenido, deberá borrar los anchos establecidos:
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.css('width','');
});
Luego agregue su contenido, luego corrija los anchos nuevamente.
Esto todavía no es una solución completa, ya que (especialmente con una tabla) necesita un marcador de posición de caída. Para eso necesitamos agregar una función al inicio que construya el marcador de posición:
$('#sortFixed tbody').sortable({
items: '> tr',
forcePlaceholderSize: true,
placeholder:'must-have-class',
start: function (event, ui) {
// Build a placeholder cell that spans all the cells in the row
var cellCount = 0;
$('td, th', ui.helper).each(function () {
// For each TD or TH try and get it's colspan attribute, and add that or 1 to the total
var colspan = 1;
var colspanAttr = $(this).attr('colspan');
if (colspanAttr > 1) {
colspan = colspanAttr;
}
cellCount += colspan;
});
// Add the placeholder UI - note that this is the item's content, so TD rather than TR
ui.placeholder.html('<td colspan="' + cellCount + '"> </td>');
}
}).disableSelection();
JS Fiddle: http://jsfiddle.net/rp4fV/4/