我正在使用jquery sortable()来创建可拖动和可排序的框。
JQuery代码如下所示:
$('.column').sortable({
connectWith: '.column',
handle: '.header',
cursor: 'move',
placeholder: 'placeholder',
forcePlaceholderSize: true,
opacity: 0.8,
stop: function(event, ui)
{
$(ui.item).find('h2').click();
var sortorder='';
$('.column').each(function(){
var itemorder=$(this).sortable('toArray');
var columnId=$(this).attr('id');
sortorder+=columnId+'='+itemorder.toString()+'&';
});
sortorder = sortorder.substring(0, sortorder.length - 1)
console.log('SortOrder: '+sortorder);
//localStorage.setItem(JSON.stringify(sortorder).sortable);
localStorage.setItem("sortables", sortorder);
//localStorage.getItem("sortables");
}
}).disableSelection();
在排序顺序之后它生成的字符串会像这样生成,然后保存到本地存储中:
“COL1 = BOX3,BOX2,BOX1&安培; COL2 = box4”
我很难将它转换回数组,我也想知道一旦它被转换回数组,我该如何获取这个数组并将其应用回盒子的排序顺序? / p>
答案 0 :(得分:1)
尝试使用下面的简单迭代创建一个object
,其密钥为col1
,值为数组[box3, box2, box1]
DEMO: http://jsfiddle.net/2yt5y/2
var str = 'col1=box3,box2,box1&col2=box4';
var cols = str.split('&');
var result = {};
for (var i = 0; i < cols.length; i++) {
var col = cols[i].split('=');
var vals = col[1].split(',');
result[col[0]] = vals;
}
答案 1 :(得分:1)
从localStorage存储并检索排序顺序后,您希望运行每个列,将portlet按照它们之前在列中的顺序“追加”到它们。因此,最后一个portlet将附加到最后,第一个portlet将首先附加。
以下是代码:
var str = localStorage.getItem("sortables." + window.location.pathname);
if (str) {
var cols = str.split('&');
for (var i = 0; i < cols.length; i++) {
var col = cols[i].split('=');
if (col[1].length > 0) {
var vals = col[1].split(',');
for (var j = 0; j < vals.length; ++j) {
console.log('appending ' + vals[j] + ' to ' + col[0]);
$('#'+col[0]).append($('#'+vals[j]));
}
}
}
}
这是小提琴:http://jsfiddle.net/bWXZU/10/
请注意,您需要正确处理几个条件:(以及上面的代码)
希望这会帮助你!
...约翰