跟踪jQuery可排序中所有元素的位置

时间:2011-07-17 20:56:43

标签: jquery jquery-ui jquery-ui-sortable

我正在试图弄清楚如何跟踪jQuery中的元素是如何排序的。 假设我的sortable中有四个元素(div),每个元素都有一个唯一的id。我们称它们为#100,#200,#300和#400,它们按顺序出现以开始。但是当我移动#100让我们说第3点时,我需要能够为这个id保存新位置,同时也要确保其他人获得更新的位置值。

我有意义吗?基本上我想得到每个唯一ID的位置,所以我可以保存列表的顺序供以后使用。

我无法找到报告可排序的所有元素的内容,只是针对被移动的元素。

指出我正确的方向? 感谢

3 个答案:

答案 0 :(得分:30)

您可以使用提供给您的停止事件进行排序以跟踪项目。这是一个小例子;

(function($) {
    $('#sortable').sortable({
        stop: function(e, ui) {
            console.log($.map($(this).find('li'), function(el) {
                return el.id + ' = ' + $(el).index();
            }));
        }
    });
})(jQuery);

这会记录sortable中所有项目的数组及其ID和当前索引。

以下是jsfiddle的一个工作示例:http://jsfiddle.net/beyondsanity/HgDZ9/

答案 1 :(得分:3)

根据文档http://api.jqueryui.com/sortable/#method-toArray,我建议您使用内置方法toArray。 例如:

  $(document).ready(function() {
    $('#sortable').sortable({
      stop: function(e, ui) {
        console.log($('#sortable').sortable('toArray'));
      }
    });
    $('#sortable').disableSelection();
  });

答案 2 :(得分:0)

jQuery UI Sortable Position可能重复。

基本上,要获得元素在可排序(或只是一个普通的旧父元素)中的位置,就像

一样
$('#300').index();

如果没有移动任何内容(index()从零开始计数),此代码将返回2,并在重新排列元素时更新。

这是一个演示:http://jsfiddle.net/XB5Dh/。您可以单击元素以查看其位置,并在拖动元素时显示新位置。