여기에 선택된 대답은 정말 좋은 해결책이지만 원래 JS 바이올린 ( http://jsfiddle.net/bgrins/tzYbU/ )에 명백한 심각한 버그가 있습니다 . 가장 긴 행을 드래그하십시오 ( God Bless You, Mr Rosewater ) 및 나머지 셀 너비가 축소됩니다.
즉, 드래그 한 셀의 셀 너비를 고정하는 것만으로는 충분하지 않습니다. 또한 테이블의 너비를 수정해야합니다.
$(function () {
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.width(cell.width());
});
$('#sortFixed tbody').sortable().disableSelection();
});
JS 피들 : http://jsfiddle.net/rp4fV/3/
이렇게하면 첫 번째 열을 드래그 한 후 테이블이 축소되는 문제가 해결되지만 새로운 열이 도입됩니다. 테이블의 내용을 변경하면 셀 크기가 수정됩니다.
내용을 추가하거나 변경할 때이 문제를 해결하려면 너비 설정을 지워야합니다.
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.css('width','');
});
그런 다음 컨텐츠를 추가 한 다음 너비를 다시 수정하십시오.
이것은 특히 테이블에서 드롭 자리 표시자가 필요하기 때문에 완벽한 솔루션이 아닙니다. 이를 위해 시작시 자리 표시자를 작성하는 함수를 추가해야합니다.
$('#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 피들 : http://jsfiddle.net/rp4fV/4/