Burada seçilen cevap gerçekten güzel bir çözüm, ancak orijinal JS kemanında görünen bir ciddi hata var ( http://jsfiddle.net/bgrins/tzYbU/ ): en uzun satırı sürüklemeyi deneyin ( God Bless You, Mr Rosewater ) ve hücre genişliklerinin geri kalanı çöker.
Bu, sürüklenen hücreye hücre genişliklerini sabitlemenin yeterli olmadığı anlamına gelir - ayrıca genişlikleri tabloya sabitlemeniz gerekir.
$(function () {
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.width(cell.width());
});
$('#sortFixed tbody').sortable().disableSelection();
});
JS Fiddle: http://jsfiddle.net/rp4fV/3/
Bu, ilk sütunu sürükledikten sonra tablonun daraltılması sorununu giderir, ancak yeni bir sütun ekler: tablonun içeriğini değiştirirseniz, hücre boyutları artık düzeltilmiştir.
İçerik eklerken veya değiştirirken bu sorunu çözmek için, ayarlanan genişlikleri temizlemeniz gerekir:
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.css('width','');
});
Ardından içeriğinizi ekleyin, ardından genişlikleri tekrar düzeltin.
Bu hala tam bir çözüm değildir, (özellikle bir tablo ile) bir damla yer tutucusuna ihtiyacınız vardır. Bunun için başlangıçta yer tutucuyu oluşturan bir işlev eklememiz gerekir:
$('#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/