稍微猶豫後,我決定採用明顯的解決方案,即使它不像通常的jQuery最佳解決方案。我在生成它們的服務器端代碼中添加了一個整數data-
字段的升序整數,客戶端創建了一個單一的氣泡排序迭代函數,如果除最後一個項目以外的所有項目(最後添加的項目都是重新添加的)是爲了:
var get_index = function(node)
{
return parseInt(jQuery(node).attr('data-sort-position'));
};
var sort_available = function()
{
var len = jQuery('#available > li').length;
if (len >= 2)
{
var moved = false;
for(var index = 0; index < len; index += 1)
{
if (!moved)
{
if (get_index(jQuery('#available > li')[index]) >
get_index(jQuery('#available > li')[len - 1]))
{
var node = jQuery(
jQuery('#available > li')[len - 1]).detach();
jQuery(node).insertBefore(
jQuery('#available > li')[index]);
moved = true;
}
}
}
}
};
我再補充一個sort_available()
調用處理程序結束時點擊了其他目的地名單中的一員時被調用:
jQuery('#included li').click(function(event)
{
jQuery(event.target).detach();
jQuery('#available').append(event.target);
assign_clicks();
sort_available();
});
現在,它似乎是把物品放回原來的位置。
所以你想拖動一些靜態數據列表到另一個可以排序的列表? – epascarello
是的,返回(或更簡單地移動項目只需點擊一下)。第二個UL最初爲空,具有用戶從第一個UL點擊或拖動的項目。這應該從第一個UL中刪除該項目。但是,如果用戶重新考慮並將項目從第二個UL移回到第一個UL,我希望新移動的元素返回到第一個UL中仍然(或再次)存在的項目中的原始位置第一個UL。 – JonathanHayward
也許你想拖動,不可排序。 – epascarello