Вы можете взять этот список элементов или песен в вашем случае, а затем перебирать каждый элемент, когда вы меняете позицию элемента. Таким образом, вы сохраняете ID элементов, но у вас есть точный номер сортировки для хранения на стороне сервера, когда это необходимо. В JS вы можете сделать что-то вроде этого:
$(document).ready(function(){
var selected=0;
var itemlist = $('#items');
var len=$(itemlist).children().length;
$("#items div").click(function(){
selected= $(this).index();
alert("Selected item is " + $(this).text());
});
$("#up").click(function(e){
e.preventDefault();
if(selected>0)
{
jQuery($(itemlist).children().eq(selected-1)).before(jQuery($(itemlist).children().eq(selected)));
selected=selected-1;
changeSortOrder();
}
});
$("#down").click(function(e){
e.preventDefault();
if(selected < len)
{
jQuery($(itemlist).children().eq(selected+1)).after(jQuery($(itemlist).children().eq(selected)));
jQuery($(itemlist).children().eq(selected-1)).attr('data-sort', selected + 1);
selected=selected+1;
changeSortOrder();
}
});
});
function changeSortOrder() {
var listItems = $('#items').children();
for (var item in listItems) {
listItems[item].setAttribute('data-sort', parseInt(item) + 1);
}
}
С добавленной функцией, которая является основным изъятием.
function changeSortOrder() {
var listItems = $('#items').children();
for (var item in listItems) {
listItems[item].setAttribute('data-sort', parseInt(item) + 1);
}
}
То, что происходит здесь, это то, что вы захватываете все эти элементы в вашем списке, затем переназначьте их сортировку, повторяя каждый из них. Поэтому, когда вы перемещаете элемент 1 вниз на позицию два, вы видите, что элемент 2 теперь имеет позицию сортировки, равную единице, а не 2, и т. Д. Для каждого элемента в списке.
Например, вот что HTML будет выглядеть после выбора элемента 1 и нажатия -> вниз:
<div id="2" sort="1" class='col'>2</div>
<div id="1" sort="2" class='col1'>1</div>
<div id="3" sort="3" class='col3'>3</div>
<div id="4" sort="4" class='col4'>4</div>
<div id="5" sort="5" class='col5'>5</div>
См. здесь JS скрипку для рабочего примера, чтобы лучше проиллюстрировать это.