【发布时间】:2014-01-15 01:46:20
【问题描述】:
我正在通过循环访问顶部菜单(对象数组)来读取一个 json 文件,然后将其取出并将其存储到本地存储中。一切正常,甚至数据都存储在本地存储中。但我的问题是它以排序顺序将数据存储在 localStorage 中,这可能是它的默认行为。但我不需要它按排序顺序,我希望它按照它在 json 中出现的顺序。因为当我将数据存储到 localstorage 并从 localstorage 读取数据时,它是按排序顺序排列的。如果它自动排序,我可以使用 $.each 中的键并附加它来维护我们的顺序。但为什么它会自行排序。有没有其他的解决方法。请帮我解决这个问题。
注意:
我需要将数据从 json 存储到 localStorage。然后从 localstorage 中读取它,并且在 localstorage 完全为空之前不要读取 json。当我手动更改本地存储中的值时,它应该反映在菜单中。我已经完成了所有条件编码,只需要弄清楚本地存储问题,即按排序顺序存储它。
以下是我的 JSON 文件、javascript 和部分 html:
JSON
{
"topmenu":
[
{
"item": "File"
},
{
"item": "Help"
},
{
"item": "Edit"
},
{
"item": "View"
},
{
"item": "Go"
},
{
"item": "Tools"
},
{
"item": "Actions"
}
]
}
JAVASCRIPT
<script>
$(function() {
if (typeof localStorage === "undefined") {
alert("Sorry, your browser does not support web storage...");
}
$.getJSON("header.json", function(data) {
$.each(data.topmenu, function(key, val) {
localStorage.setItem(val.item, val.item);
});
loadMenu();
});
function loadMenu() {
$('.horizontalmenu').html('');
if (!localStorage.length < 1) {
for (var i = 0; i < localStorage.length; i++) {
var item = localStorage.getItem(localStorage.key(i));
$('.horizontalmenu').append('<li class="menu"><a href="#">' + item + '</a></li>');
}
} else {
$('.horizontalmenu').html("<li class='menu'>No menu</li>");
}
}
});
</script>
部分 HTML
<div id="header">
<div id="header-title">
Test
</div>
<div id="header-menu">
<ul class="horizontalmenu">
</ul>
</div>
</div>
【问题讨论】:
-
您是否尝试连接索引 + 您的密钥?例如:1_文件; 2_帮助。或者在你的json“位置”中创建另一个属性并使用underscore.js按顺序检索。
标签: jquery json html local-storage