稍微犹豫后,我决定采用明显的解决方案,即使它不像通常的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