拖放时获取元素在列表中的位置(ui.sortable)

Posted

技术标签:

【中文标题】拖放时获取元素在列表中的位置(ui.sortable)【英文标题】:Getting the position of the element in a list when it's drag/dropped (ui.sortable) 【发布时间】:2011-01-27 09:16:31 【问题描述】:

我有一个这样的可排序列表:http://jqueryui.com/demos/sortable

当它被移动时,是否可以获得列表中元素的开始和结束位置?我说的是他们的职位编号,在列表中。

例如,如果我将元素 2 移动到列表中的位置 5,我想将这两个数字分配给变量。

我是 jQuery 新手 - 任何帮助将不胜感激。

【问题讨论】:

这是 jQuery UI 糟糕的 API 设计的一个很好的例子 【参考方案1】:
演示: http://so.lucafilosofi.com/getting-the-position-of-the-element-in-a-list-when-its-drag-dropped-ui-sortable/

解决方案:

$(function() 
    $('ul#sortable').sortable(
        start: function(event, ui) 
            var start_pos = ui.item.index();
            ui.item.data('start_pos', start_pos);
        ,
        update: function(event, ui) 
            var start_pos = ui.item.data('start_pos');
            var end_pos = ui.item.index();
            alert(start_pos + ' - ' + end_pos);
        
    );
);
注意: 在Alconja 的建议下更新以使用jQuery data() 方法

【讨论】:

+1 不错的简洁答案,但您不需要包装 ui.item,它已经是一个 jQuery 对象。所以不要使用$(ui.item),而是使用ui.item 优雅的答案!太感谢了。我想 ui.item 对象就是我要找的,在这里。 +1,尽管您可能应该在start 中使用ui.item.data('start_pos', start_pos); 和在update 中使用var start_pos = ui.item.data('start_pos');,而不是污染id【参考方案2】:

我相信您想要做的是使用serialize method。序列化是获取列表的新顺序。

【讨论】:

【参考方案3】:

由于某种原因,ui.item.index() 对我不起作用。

这样做了:

update: function (event, ui) 

    var index = $('li', $(ui.item).parent()).index(ui.item);
    alert(index);

【讨论】:

以上是关于拖放时获取元素在列表中的位置(ui.sortable)的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 在QGraphicScene中拖放时如何从项目中获取文本?

在 C# 中的面板上拖放时移动控件

如何在拖放时克隆 div 而不是在拖动开始时克隆

C#在拖放时实现ListView中的自动滚动

删除拖放时可拖动的助手克隆

jQuery拖放 - 如何获取被拖动的元素