这不是一个艰巨的任务,但是我遇到了一些问题。我有一个代码,单击该代码可从localstorage中删除项目,但无法正常工作。当此代码仅出现一次时,它将起作用。但是,该代码将需要多次使用(每个div一个)。当为每个div添加所有单独的代码块时,所有本地存储项将同时删除(04、05、06、07等)。它不会从产生点击的div中删除目标本地存储项。 所有需要删除的项目都以数字结尾,例如“ state08,city08,country08,city09,state10,city10”,等等。我知道localstorage仅存储字符串,因此我相信这是问题的根源。因此,我正在尝试使我的代码能够处理每个字符串末尾出现的数字。有谁知道如何使它工作?
$('.clear_button').each(function(){
$(this).click(function(){
var num = 05;
var n = num.toString();
Object.keys(localStorage)
.filter(key => key.endsWith(n))
.forEach(key => localStorage
.removeItem((key)))
});
});
$('.clear_button').each(function(){
$(this).click(function(){
var num = 06;
var n = num.toString();
Object.keys(localStorage)
.filter(key => key.endsWith(n))
.forEach(key => localStorage
.removeItem((key)))
});
});
<fieldset id="fieldset18">
<label >Country</label>
<select id="country18" class="country" name="country">
<?php include("countryAjaxData.php"); ?>
</select>
<label State;</label>
<select id="state18" class="state" name="state">
<option value="" selected="selected">State</option>
</select>
<label >City</label>
<select id="city18" class="city" name="city">
<option value="" selected="selected">City</option>
</select>
</fieldset>
<div>
<p class="clear_button">clear</p>
</div>
在这里,我尝试将05转换为字符串,然后删除所有以“ 05”结尾的字符串,但是它不起作用,因为具有“ 06”的代码也会触发并删除所有的“ 06” localstorage项目,例如好。我需要此代码针对每个数字独立工作,以便用户可以清除给定的本地存储项,而不会打扰其他人。谁能帮我解决这个问题?谢谢。
答案 0 :(得分:6)
据我所见,当用户单击.clear_button类时,将执行所有绑定的功能,因此,如果您具有n = 1 ... 5,则将有5个.clear_button的单击处理程序,每个单击处理程序将从localStorage中删除相关项目,该项目以1、2、3,...,5结尾。这就是为什么要删除任何内容的原因。但是我仍然不清楚全球情况以及您要实现的目标。
您可以在每个.clear_button的data属性中存储一个数字,并使用该数字进行清除,这样,您只需要一个处理程序(相对于n个处理程序):
<a class=".clear_button" data-num="1">Remove 1</a>
<a class=".clear_button" data-num="2">Remove 2</a>
... etc ...
<a class=".clear_button" data-num="n">Remove n</a>
$( '.clear_button' ).click(function(){
var n = $( this ).data( 'num' );
Object.keys(localStorage)
.filter(key => key.endsWith(n))
.forEach(key => localStorage
.removeItem((key)))
});
在评论中回复后进行编辑
<fieldset id="fieldset18">
<label>Country</label>
<select id="country18" class="country" name="country">
<?php include("countryAjaxData.php"); ?>
</select>
<label>State</label>
<select id="state18" class="state" name="state">
<option value="" selected="selected">State</option>
</select>
<label>City</label>
<select id="city18" class="city" name="city">
<option value="" selected="selected">City</option>
</select>
</fieldset>
<div><p class="clear_button" data-num="18">clear</p></div>
此外,如果localStorage项具有固定的名称和不同的结束号,则jQuery代码也可以简化为:
$( '.clear_button' ).click(function(){
var n = $( this ).data( 'num' );
localStorage.removeItem( 'city' + n );
localStorage.removeItem( 'state' + n );
localStorage.removeItem( 'country' + n );
...
});
请注意,如果您必须添加数字,我并没有使用零填充,但是我会留下项名称,例如city1,city2等,而没有零(city01,city02 、. ..)。