LIFO在javascript cookie中

时间:2015-09-02 10:12:39

标签: javascript jquery cookies

尝试使用LIFO(后进先出)概念在Cookie中保存最后五个搜索。 当搜索六个查询时,它将替换最后一个。我们怎样才能做到这一点。 我尝试了这段代码,但只保存了一个值。

    function setCookie(key, value) {  
       var expires = new Date();  
       expires.setTime(expires.getTime() + 31536000000); //1 year  
       document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();  
       } 

    function getCookie(key) {  
       var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');  
       return keyValue ? keyValue[2] : null;  
       }  

    function setCookieToBrowser(){
    var searchString=$("#auto").val();
    setCookie('lastSearch', searchString);  
    }

    function getCookiefromBrowser(){
    $('#auto').val(getCookie('lastSearch'));
    }
    getCookiefromBrowser();
    $('#frmmainSearch2').submit(function() {
     setCookieToBrowser()
      return true;
    });


 <form id="frmmainSearch2" action="#" method="post">
 <input type="text" id="auto">
 <input type="submit" value="save">

JsFiddle

1 个答案:

答案 0 :(得分:1)

基本思想是在cookie中存储一个数组,并在达到最大长度时移动该数组。

这是一步一步的过程:

  1. 尝试阅读Cookie中的查询列表
  2. 如果cookie中存在该值,请执行JSON.parse以获取阵列。如果它不存在,请使用空数组
  3. 提交表单时,请检查先前查询数组的长度。如果它已包含五个查询,请在阵列上执行shift()以删除第一个项目
  4. 将当前查询推送到数组的末尾。
  5. 使用阵列上的JSON.stringify更新Cookie。
  6. 请参阅更新后的代码in the updated JSfiddle或以下内容:

    function setCookieToBrowser(){
      var searchString=$("#auto").val();
    
      if(previousQueries.length === 5) previousQueries.shift();
      previousQueries.push(searchString);
      setCookie('lastSearch', JSON.stringify(previousQueries));  
    }
    
    function getCookieFromBrowser(){
      var cookieValue = getCookie('lastSearch');
      if(cookieValue !== null) {
        previousQueries = JSON.parse(cookieValue);
        console.log('previous queries', previousQueries)
        var datalist = document.querySelector('datalist');
        datalist.innerHTML = '';
    
        for(var i=previousQueries.length - 1; i>=0;i--) {
          var option = document.createElement('option');
          option.value = previousQueries[i];
          datalist.appendChild(option);
        }
        $('#auto').val(previousQueries[0]);
      }
    }
    

    请注意更新的JSFiddle中的代码如何使用datalist进行自动完成。