1

我正在使用 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"

我很难将它转换回数组,我也想知道一旦它被转换回数组,我该如何获取这个数组并将其应用回盒子的排序顺序?

4

2 回答 2

1

尝试像下面这样的简单迭代来创建一个object带有键col1和值的数组[box3, box2, box1]

演示: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;
}
于 2012-10-30T19:06:41.487 回答
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/

请注意,您要正确处理几种情况:(上面的代码确实如此)

  1. 当本地存储中没有任何内容时
  2. 当一列没有项目时

希望这可以帮助你!

约翰...

于 2012-10-31T13:54:53.863 回答