Пожалуйста, просмотрите:
Метод сортировки API jQuery UI API
В нем говорится:
Обновление сортируемых элементов.Запускает перезагрузку всех сортируемых элементов, вызывая распознавание новых элементов.
При динамическом добавлении элементов вы добавляете их до инициализации Sortable или после.Если это было сделано ранее, вы просто собираете элементы списка, а затем вызываете sorttable.Если после, добавьте элементы, а затем запустите метод обновления.
Это довольно сложный пример, но он предполагает, что вы добавляете элементы из списка на основе API и, возможно, добавляете больше элементов позже.
$(function() {
var extData = [{
label: "LivePD",
id: 1
}, {
label: "Football",
id: 2
}, {
label: "Walking Dead",
id: 3
}, {
label: "Survivor",
id: 4
}, {
label: "The Voice",
id: 5
}, {
label: "Shark Tank",
id: 6
}, {
label: "DWTS",
id: 7
}, {
label: "RHOOC",
id: 8
}];
function updateList(data, target) {
var sort = target.find(".sortable");
console.log(data, sort);
$.each(data, function(k, v) {
$("<li>", {
class: "ui-state-default",
id: target.attr("id") + "-item-" + v.id
}).html(v.label).appendTo(sort);
});
if (sort.hasClass("ui-sortable")) {
sort.sortable("refresh");
}
}
updateList(extData, $("#my-list"));
$(".sortable").sortable();
$(".sortable").disableSelection();
$(".add").click(function(e) {
var dlg = $("<div>", {
title: "Add To " + $(this).parent().find("p").text()
});
var that = $(this);
dlg.append(
$("<label>").html("Name"),
$("<input>", {
type: "text",
class: "name txt"
}),
$("<label>").html("ID"),
$("<input>", {
type: "input",
class: "id txt"
})
);
dlg.dialog({
modal: true,
buttons: [{
text: "Ok",
click: function() {
var d = [{
label: $(this).find(".name").val(),
id: $(this).find(".id").val()
}];
updateList(d, that.parent());
$(this).dialog("close");
$(this).remove();
}
}, {
text: "Cancel",
click: function() {
$(this).dialog("close");
$(this).remove();
}
}]
});
});
});
.sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 60%;
}
.sortable li {
margin: 0 3px 3px 3px;
padding: 0.4em;
padding-left: 1.5em;
font-size: 1.4em;
height: 18px;
}
.sortable li span {
position: absolute;
margin-left: -1.3em;
}
.ui-dialog-content label {
display: block;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="my-list">
<p>My List</p>
<ul class="sortable">
</ul>
<button id="my-list-add-btn" class="add btn">Add</button>
</div>
Если у вас более 1 списка, этот код работает очень хорошо, так как позволяет использовать одну и ту же функцию для множества разных списков.
Надеюсь, это поможет.