【问题标题】:Compare original ordered list with current将原始排序列表与当前排序列表进行比较
【发布时间】:2017-06-12 19:52:14
【问题描述】:

我正在使用 jquery 可排序,以及大量自定义函数来管理列表。我有触发可排序的函数,但我需要更改它,以便仅在列表发生任何变化时才运行可排序的函数。

有没有办法将整个列表读入一个变量,以便我以后可以将它与当前列表进行比较?

可能是这样的?:

var mylist=$('#myol').attr(ids);

然后:

if(mylist != $('#myol').attr(ids)) {
    $('#myol').trigger('sortupdate');
}

【问题讨论】:

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


【解决方案1】:

这是一个基于我的评论的简单示例:

https://jsfiddle.net/Twisty/3x64npfw/

JavaScript

$(function() {
  var preChange, postChange;

  function equalArr(a, b) {
    console.log("Compare", a, b);
    var eq = 0;
    $.each(a, function(k, v) {
      if(a[k] != b[k]){
      eq++;
      }
    });
    return (eq ? false : true);
  }

  $("#sortable").sortable({
    start: function(event, ui) {
      preChange = $(this).sortable("toArray");
    },
    stop: function(event, ui) {
      postChange = $(this).sortable("toArray");
      $(".results").html("After change, the list is the " + (equalArr(preChange, postChange) ? "same." : "different."));
    }
  });
});

这要求列表中的每个项目都具有id 属性。如果您选择不使用它们,则需要创建一个函数来迭代列表、读取每个项目并输出一个数组。

function listToArray(target){
  var items = target.children();
  var myArray = [];
  items.each(function(){
    myArray.push($(this).text());
  });
  if(myArray.length == 0){
    return false;
  }
  return myArray;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2012-07-25
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多