0

我具有单击时将 div 的样式保存并清除到 localStorage 的功能:

var originalAttributes = $('.aaa').attr('style');
$('.aaa').each(function(){
    var d = $(this),
    id = d.attr('id'),
    storedStyle = window.localStorage.getItem('aaaStyle' + id);
    if (storedStyle != undefined){   //style stored
        d.attr('style', storedStyle);
    }
});

//mouse event functions for class="aaa"

$('#save').click(function () {
    $('.aaa').each(function(){
        var d = $(this),
        id = d.attr('id'),
        style = d.attr('style');
        if (style != originalAttributes){   //style changed
            //$.cookie('aaaStyle' + id, style, { expires: 30 });
            window.localStorage.setItem('aaaStyle' + id, style);
        }
    });

});

$('#clear').click(function () {
    // unset changes
    $('.aaa').attr('style',originalAttributes).each(function(){
        var d = $(this),
        id = d.attr('id');
        window.localStorage.removeItem('aaaStyle' + id);
    });
});

http://jsfiddle.net/z8KuE/33/

应该在此代码中添加什么以便压缩本地存储中的数据?

(每个浏览器的每个域都有内存限制,我想最大化这个功能)

4

1 回答 1

1

您可以在 webworker 中压缩字符串,以免在主线程上增加不必要的负载 - 据我所知,localStorage 允许在现代浏览器中每页分配高达 20mb 的空间,在 IE 中通过所有人共享最多 200mb 的空间。站点 - 附加压缩 - 如果 id 和类少于 255 个,您可以构建 id 和类的映射,并使用 String.fromCharCode(int) 将它们保存为一个字符,并在 localStorage 中保存为一个大字符串,然后进行解码 - inputstr[pos ].charCodeAt(0) 用于在页面启动时转换为可用对象的每一对。但是,在每次更改时生成这个大字符串是个坏主意,我会在页面关闭之前使用 onbeforeunload 事件来执行此操作

于 2013-10-01T20:18:01.233 回答