javascript - 从本地存储中删除整个阵列

标签 javascript php jquery local-storage

如何在没有 localStorage.clear(); 方法的情况下完全删除 localStorage

我有一个购物车,您可以在其中存储您要购买的产品,并且存储发生在本地存储中。目前,“清除购物车”按钮与 localStorage.clear(); 方法一起使用,但我还有一个表格,您可以在其中删除单个产品。但是,如果您使用同一行上的“删除”按钮删除整个表,而它恰好是最后一个产品,则本地存储仍将有一个空数组,并被视为 NOT null

这是我删除项目的方法:

function removeItem(itemId) {
//removes the parent row of table
$('#product-table').on('click', '.remove-item', function(e) {
    $(this).closest('tr').remove();
});

var index = -1;
var obj = JSON.parse(localStorage.getItem("items")) || {}; //fetch cart from storage
var items = obj || []; //get the products
$.each(items, function(key, value) {
    if (key === itemId) {
        items.splice(key, 1); //remove item from array
    }
});
localStorage.setItem("items", JSON.stringify(obj)); //set item back into storage

sum = 0;
$.each(items, function(key, value) {
    sum += value.itemPrice;
});
$("#summary").html(sum.toFixed(2) + "€");
updateCartCount();
}

它正确地删除了项目,但每当我删除最后一个产品时,table 元素并添加一段说“您的购物车是空的。返回商店”。

函数如下:

function hideElements() {
if ($(".cart-wrapper").length) {
    if (localStorage.getItem("items") === null) {
        $("#products").css("display", "none");
        $("#empty").css("display", "block");
        $(".btn-clear").css("display", "none");
    } else {
        $("#products").css("display", "block");
        $("#empty").css("display", "none");
        $(".btn-clear").css("display", "block");
    }
}
}

hideElements 函数不会将本地存储识别为空,因为它表明存在一个空数组对象。

如果删除的产品是购物车中的最后一个产品,我如何通过删除整个本地存储来实现此目的?我尝试使用 localStorage.getItems("items").length != 0 等都没有用。

下图显示了我的“空”本地存储:

Local Storage

最佳答案

localstorage.get() 返回的是字符串而不是 JSON,因此您需要做的是解析字符串,即 localStorage.getItem('items') 返回 "[]" 其长度等于 2。您需要做的是 JSON.parse(localstorage.getItem('item')).length

关于javascript - 从本地存储中删除整个阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57202679/

相关文章:

JQuery变量: how to convert positive height into negative margin?

javascript - 通过单击按钮从 javascript 和 php 调用两个函数

javascript - 使用 KineticJS 从图层中删除对象

javascript - 在 ajax 查询完成之前显示加载图像的好方法是什么?

php - 如何锁定 InnoDB 表中的行?

php - 通过php控制css

javascript - IE 11 v11 不尊重单机输入上的 "disabled"属性

javascript - 我是 es6 javascript 新手

javascript - 使用 jquery 平滑滚动

php - MySQL where 子句中的一个或多个参数