将逗号和散列分隔的字符串转换为数组

时间:2012-10-30 19:00:44

标签: javascript string arraylist local-storage jquery-ui-sortable

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

2 个答案:

答案 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/

请注意,您需要正确处理几个条件:(以及上面的代码)

  1. 当本地存储中没有任何内容时
  2. 当列没有项目时
  3. 希望这会帮助你!

    ...约翰