将原始有序列表与当前列表进行比较
Compare original ordered list with current
我正在使用 jquery sortable 以及大量自定义函数来管理列表。我有触发可排序的功能,但我需要更改它,以便仅当列表以任何方式更改时才运行可排序的功能。
有没有办法将整个列表读入一个变量,以便我以后可以将它与当前列表进行比较?
也许是这样的?:
var mylist=$('#myol').attr(ids);
之后:
if(mylist != $('#myol').attr(ids)) {
$('#myol').trigger('sortupdate');
}
这是一个基于我的评论的简单示例:
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;
}
我正在使用 jquery sortable 以及大量自定义函数来管理列表。我有触发可排序的功能,但我需要更改它,以便仅当列表以任何方式更改时才运行可排序的功能。
有没有办法将整个列表读入一个变量,以便我以后可以将它与当前列表进行比较?
也许是这样的?:
var mylist=$('#myol').attr(ids);
之后:
if(mylist != $('#myol').attr(ids)) {
$('#myol').trigger('sortupdate');
}
这是一个基于我的评论的简单示例:
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;
}