尝试使用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">
答案 0 :(得分:1)
基本思想是在cookie中存储一个数组,并在达到最大长度时移动该数组。
这是一步一步的过程:
JSON.parse
以获取阵列。如果它不存在,请使用空数组shift()
以删除第一个项目JSON.stringify
更新Cookie。 请参阅更新后的代码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进行自动完成。