javascript - 如何删除特定索引或行中的数据本地存储
问题描述
在我的代码中,如果我运行,我在本地存储中的数据将全部删除。我如何删除我选择的 1 行我很困惑如何从本地存储中删除表数据中的行
我现在的问题是,当我单击行表中的按钮删除时,行选择被删除,但本地存储中的数据没有被删除,然后当我刷新页面时,数据再次显示。
function hapus(r){
var i = r.parentNode.parentNode.rowIndex;
document.getElementById("myTable").deleteRow(i);
localStorage.removeItem('dataProduk');
}
像这样的完整代码
<script type="text/javascript">
$(document).ready(function() {
$('.js-example-basic-single').select2();
$('#getProduks').change(function(e){
let data = $('#getProduks').val();
let datas = data.split('|');
let idProduk = datas[0];
let hargaProduk = datas[1];
let stokProduk = datas[2];
let namaProduk = datas[3];
$('#hargaProduk').val('');
$('#hargaProduk').val(hargaProduk);
})
let dataStore = localStorage.getItem('dataProduk') ? JSON.parse(localStorage.getItem('dataProduk')) : [];
let subAllTotal = 0;
for (var i = 0; i < dataStore.length; i++){
let table = `
<tr>
<td width="10" align="center" scope="row"></td>
<td><button type="submit" onclick="hapus(this)"><i class="fa fa-trash-o"></i></button></td>
<td> ${dataStore[i].namaProduk}</td>
<td> ${dataStore[i].hargaProduk}</td>
<td> ${dataStore[i].disProduk}</td>
<td> ${dataStore[i].jumProduk}</td>
<td> ${(dataStore[i].hargaProduk * dataStore[i].jumProduk) - (dataStore[i].hargaProduk * dataStore[i].jumProduk * dataStore[i].disProduk/100)}</td>
</tr>
`
$('tbody').append(table);
subAllTotal += (dataStore[i].hargaProduk * dataStore[i].jumProduk) - (dataStore[i].hargaProduk * dataStore[i].jumProduk * dataStore[i].disProduk/100)
}
$('#subAllTotal').html(jadiinRupiah(subAllTotal));
$('#tambahProduk').click(function(){
let namaP = $('#getProduks').val().split('|')[3];
let hargaP = $('#hargaProduk').val();
let disP = $('#getDis').val();
let jumP = $('#getJum').val();
let data = {
namaProduk: namaP,
hargaProduk: hargaP,
disProduk: disP,
jumProduk: jumP
}
dataStore.push(data)
localStorage.setItem('dataProduk',JSON.stringify(dataStore))
let subAllTotal = 0;
let table = `
<tr>
<td width="10" align="center" scope="row"></td>
<td><button type="submit" onclick="hapus(this)"><i class="fa fa-trash-o"></i></button></td>
<td> ${data.namaProduk}</td>
<td> ${data.hargaProduk}</td>
<td> ${data.disProduk}</td>
<td> ${data.jumProduk}</td>
<td> ${(data.hargaProduk * data.jumProduk) - (data.hargaProduk * data.jumProduk * data.disProduk/100)}</td>
</tr>
`
$('tbody').append(table);
for (var i = 0; i < dataStore.length; i++){
//subAllTotal += (data.hargaProduk * data.jumProduk) - (data.hargaProduk * data.jumProduk * data.disProduk/100)
subAllTotal += (dataStore[i].hargaProduk * dataStore[i].jumProduk) - (dataStore[i].hargaProduk * dataStore[i].jumProduk * dataStore[i].disProduk/100)
}
$('#subAllTotal').html(jadiinRupiah(subAllTotal));
})
});
$('#hapusProduk').click(function(){
localStorage.clear();
});
function hapus(r){
var i = r.parentNode.parentNode.rowIndex;
document.getElementById("myTable").deleteRow(i);
localStorage.removeItem('dataProduk');
}
function jadiinRupiah(total) {
return new Intl.NumberFormat('en-US', {style: 'currency', currency: 'IDR'}).format(total).split('IDR')[1].trim()
}
解决方案
您需要获取当前数组,删除该行并再次保存。
function hapus(r){
var i = r.parentNode.parentNode.rowIndex;
document.getElementById("myTable").deleteRow(i);
let data = localStorage.getItem('dataProduk');
data.splice(i,1); //remove data[i]
localStorage.setItem('dataProduk', data);
}
我不确定是什么dataProduk
样子 - 如果它是一个数组,上面的解决方案将起作用,但如果它是一个你必须使用的对象dataProduk.filter