Jawaban yang dipilih di sini adalah solusi yang sangat bagus, tetapi memiliki satu bug parah yang terlihat pada JS biola asli ( http://jsfiddle.net/bgrins/tzYbU/ ): coba seret baris terpanjang ( God Bless You, Mr Rosewater ), dan sisa sel lebarnya runtuh.
Ini berarti bahwa memperbaiki lebar sel pada sel yang diseret tidak cukup - Anda juga perlu memperbaiki lebar pada tabel.
$(function () {
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.width(cell.width());
});
$('#sortFixed tbody').sortable().disableSelection();
});
JS Fiddle: http://jsfiddle.net/rp4fV/3/
Ini memperbaiki masalah tabel runtuh setelah Anda menyeret kolom pertama, tetapi memperkenalkan yang baru: jika Anda mengubah konten tabel ukuran sel sekarang diperbaiki.
Untuk mengatasinya saat menambahkan atau mengubah konten, Anda harus menghapus set lebar:
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.css('width','');
});
Kemudian tambahkan konten Anda, lalu perbaiki lagi lebar.
Ini masih bukan solusi yang lengkap, karena (terutama dengan tabel) Anda membutuhkan tempat penampung drop. Untuk itu kita perlu menambahkan fungsi saat start yang membangun placeholder:
$('#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/