我不知道我是否过度复杂化了......但我正试图在本地存储中删除json对象。只有一个localstorage项包含所有数据。
我没有错误,但当我回到页面时,该项目仍然存在。
控制台记录Json
{
"cities": [
{
"id": 0,
"storename": "test",
"notes": "test",
"rejected": "on",
"offer": "test"
},
{
"id": 1,
"storename": "test2",
"notes": "test2",
"rejected": "on",
"offer": "test2"
}
]
}
Jquery的
$('.deleteButton').click(function(){
var id = $(this).data('centreid');
$(this).remove();
localStorage.clear();
console.log(JsonData);
$.each($.parseJSON(JsonData), function(idx, cities) {
$.each(cities, function(idx, obj){
delete id[id];
});
});
var Count = 0;
localStorage.setItem(Count, JsonData);
JsonData = localStorage.getItem(Count);
答案 0 :(得分:1)
问题是你的$.parseJSON(JsonData)
返回已解析的对象,而不是更改此对象,但是没有存储在任何地方,所以就这样了。您需要将已解析的对象存储到变量,修改并使用此对象调用SetItem。工作示例:
$('.deleteButton').click(function(){
var id = $(this).data('centreid');
$(this).remove();
localStorage.clear();
console.log(JsonData);
var data = JSON.parse(JsonData),
indexToRemove = null;
$.each(data['cities'], function(idx, obj){
if (obj['id'] == id) {
indexToRemove = idx;
return false;
}
});
if (indexToRemove !== null) {
data['cities'].splice(indexToRemove, 1);
}
var Count = 0;
localStorage.setItem(Count, JSON.stringify(data));
JsonData = localStorage.getItem(Count);
答案 1 :(得分:0)
您正在使用$.parseJSON
从已解析的JSON字符串中删除该对象。但是,将项目设置为本地存储时,您将再次使用原始字符串。
要解决 - 用修改后的JSON对象覆盖字符串。
答案 2 :(得分:0)
线是否正确?
delete id[id];
您不是仅通过此对象移动
再次设置变量 var data = $.parseJSON(JsonData);
for(var prop in data){
for(var i=0; i< data[prop].length; i++){
if(data[prop][i].id == id){
data[prop].splice(i, 1);
break;
}
}
}
JsonData = json.stringify(data);