如何从以特定数字结尾的本地存储中删除项目?

时间:2020-01-23 23:17:39

标签: javascript jquery local-storage

这不是一个艰巨的任务,但是我遇到了一些问题。我有一个代码,单击该代码可从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项目,例如好。我需要此代码针对每个数字独立工作,以便用户可以清除给定的本地存储项,而不会打扰其他人。谁能帮我解决这个问题?谢谢。

1 个答案:

答案 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 、. ..)。