यहां चयनित उत्तर वास्तव में एक अच्छा समाधान है, लेकिन इसमें एक गंभीर बग है जो मूल JS fiddle ( http://jsfiddle.net/bgrins/tzYbU/ ) में स्पष्ट है : सबसे लंबी पंक्ति ( गॉड ब्लेस यू, मि। ) खींचने की कोशिश करें । रोसेवाटर ), और बाकी सेल चौड़ाई गिर जाती है।
इसका मतलब है कि घसीटे गए सेल पर सेल की चौड़ाई को ठीक करना पर्याप्त नहीं है - आपको टेबल पर चौड़ाई को ठीक करने की भी आवश्यकता है।
$(function () {
$('td, th', '#sortFixed').each(function () {
var cell = $(this);
cell.width(cell.width());
});
$('#sortFixed tbody').sortable().disableSelection();
});
जेएस फिडल: 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();
जेएस फिडल: http://jsfiddle.net/rp4fV/4/