我使用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
我很难将它转换回数组,我还想知道一旦它被转换回数组,我如何获取这个数组,并将其应用于框的排序顺序?
发布于 2012-10-31 21:54:54
一旦您从localStorage中存储和检索了排序顺序,您就需要遍历每一列,以它们以前在列中的相同顺序将portlets“附加”到它们。因此,最后一个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/
请注意,您需要正确处理以下几种情况:(上面的代码就是这样做的)
(当本地存储中没有任何项时
)
希望这能对你有所帮助!
约翰..。
发布于 2012-10-31 03:06:41
尝试如下所示的简单迭代来创建一个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;
}https://stackoverflow.com/questions/13145923
复制相似问题