Это не совсем красиво, но все же будет работать.
Рабочий пример: https://jsfiddle.net/Twisty/q7oyh9mj/53/
JavaScript
$(function() {
$('thead tr').sortable({
containment: "parent",
placeholder: "placeholder",
opacity: 0.5,
helper: "clone",
axis: 'x',
start: function(e, ui) {
var ind_th = ui.item.index();
$('tbody tr').each(function(ind, el) {
$('td', el).eq(ind_th).addClass('drg').css('color', 'red');
});
},
stop: function(e, ui) {
var itInd = ui.item.index();
$("tbody tr").each(function(ind, el) {
var cell = $(".drg", el).detach();
cell.insertBefore($("td", el).eq(itInd));
cell.removeClass("drg").css("color", "black");
});
}
});
$('thead tr').disableSelection();
});
ВыВы также можете создать своего собственного помощника, используя function(event, element)
, но он не работает хорошо в stop
или update
.
Так что в start
я добавляю класс drg
, чтобы помочь идентифицироватьклетки, которые будут перемещены.После запуска stop
я использую .detach()
, чтобы удалить их из строк, а затем insertBefore()
, чтобы поместить их обратно на новую позицию в строке на основе индекса заголовка.
Если у вас естьмного данных, я бы посоветовал посмотреть на DataTables.Я считаю, что он предлагает эту функциональность.
Обновление
Новый пример: https://jsfiddle.net/Twisty/q7oyh9mj/72/
Два незначительных изменения:
- Удалено
containment
;это препятствовало перетаскиванию заголовка за границы таблицы и не могло быть помещено в первую позицию. - Добавить
if
, когда точка отбрасывания должна быть последним элементом
Вы также можетенастройте параметры tolerance
: https://jsfiddle.net/Twisty/q7oyh9mj/73/
Ваш выбор способа управления им.
Надеюсь, это поможет.