在Firefox中获取本地存储值的问题

时间:2013-11-26 09:20:48

标签: jquery html5 local-storage

我正在使用以下JQuery代码从本地存储中使用数字键获取值。

$.each(localStorage, function(key, val)
{
    if($.isNumeric(key))
    {
        console.log(key + ", " + val);
    }
});

我随后将键“1”,“2”和“3”的值添加到本地存储。但上面的循环在Firefox中按键的后退顺序打印值,即“3”,“2”,“1”。如果我在Chrome和IE上运行此脚本,则会按预期顺序(“1”,“2”,“3”)打印值。

所有浏览器都更新到最新版本(FF - 25.0.1,Chrome - 31.0.1650.57,IE - 11)。

有人可以帮助我理解为什么FF按顺序返回值,我该如何防止这种情况?当然,我可以将Local Storage的值分配给某个数组,然后对其进行排序,但我想避免额外的编码。

2 个答案:

答案 0 :(得分:1)

当键添加到localStorage时,它们会被添加到地图中。不幸的是,当您迭代它时,无法保证此地图将具有给定的顺序。这取决于浏览器的实现,因此Chrome / IE与FF之间存在差异。你可以做些什么来解决你的问题:

var keys = Object.keys(localStorage);
var sortedKeys = keys.sort();
$.each(.sort(), function(key, val)
{
    if($.isNumeric(key))
    {
        console.log(key + ", " + val);
    }
});

但是这不会保留localStorage映射的添加顺序,它只会按词法顺序对键进行排序。如果需要,您可以修改上面的代码并添加自定义排序功能。

答案 1 :(得分:0)

LocalStorage只是键值字典。它不支持订购。如果您想按某种顺序对项目进行排序,请查看以下链接:

Html5 local storage sort

javascript html5 localstorage sort order