javascript+jquery:利用cookie实现搜索记录
需要在客户端保存用户的搜索记录,这样一来,当用户再次点击输入框,就可以自动显示用户最近的输入记录。最终效果如下:
1,默认情况下,用户未输入,显示最近的几条搜索记录:

2,用户输入字符,自动匹配最近的搜索记录:

想法是用一个数组存储用户的输入记录,然后放到cookie中,对搜索记录的所有操作都围绕这个数组进行。思路如下:
- 1,显示:从cookie中拿到这个数组,从后往前显示内容,因为后面的是最新的;
- 2,添加:首先监测是否存在,如果存在,就删除原来的,然后把新的添加到数组的最后;
- 3,删除:直接从数组中删除这条记录。然后更新cookie值。
- 4,清空:直接把数组清空,然后更新cookie值。
详细代码如下:
<scri-pt src="../js/jquery-3.1.1.min.js"></scri-pt><scri-pt src="../js/jquery.cookie.js"></scri-pt><scri-pt type="text/javascri-pt">var save_max_len=50;//最多保存50条搜索记录,超过50条,新的记录覆盖最旧的var display_max_len=7;//下拉框最多显示7条记录$(document).ready(function() {showHistory();//监听搜索框的文本输入,去cookie中查询相关的搜索记录$("#search_text").bind(’input propertychange’, function() {showHistory();});//历史记录点击事件$(document).delegate("div.details", "click", function() {var search_text = $(this).text();$("#search_text").val(search_text);search(search_text);});});//显示历史记录function showHistory() {var data = new Array();var cookie=$.cookie("search_history");//获取cookieif(cookie!=null){data = JSON.parse(cookie); //从cookie中取出数组}$("#history").empty();//清除原来的显示内容,以免重复显示var str=$("#search_text").val();if(!str){str="";}if (data != null) {var len = data.length>display_max_len?display_max_len:data.length;//显示时只显示特定的条数var limit = data.length-len-1;for (var i = data.length-1; i >limit ; i--) {if(data[i].indexOf(str)>-1){//动态创建历史记录条目var liHtml = ’<li><div class=><i class=></i>’;liHtml += ’<b class=><a href="javascri-pt:;" onclick="itemClick(’+data[i]+’)">’+data[i]+’</a></b>’;liHtml += ’</div>’;liHtml += ’<i class=></i>’;liHtml += ’</li>’;$("#history").append(liHtml);}}}}//添加历史记录function addHistory(str) {var data = new Array();var cookie=$.cookie("search_history");if(cookie!=null){data = JSON.parse(cookie);}//如果历史记录中有,就先删除,然后再添加(保持最近搜索的记录在最新),否则,直接添加var index=-1;if(data){index=data.indexOf(str);}if(index>-1){data.splice(index,1);//删除原来的}//最多保留save_max_len条记录,超过最大条数,就把第一条删除if(data && data.length==save_max_len){data.splice(0,1);}data.push(str);$.cookie(’search_history’, JSON.stringify(data), {expires : 365});//设置一年有效期}//删除历史记录function deleteHistory(index){var data = new Array();data = JSON.parse($.cookie("search_history"));data.splice(index,1);$.cookie(’search_history’, JSON.stringify(data), {expires : 365});showHistory();}//清空历史记录function emptyHistory(){$.cookie(’search_history’, null, {expires : -1});showHistory();}//点击搜索记录条目function itemClick(str){$("#search_text").val(str);search(str);}//点击搜索图标function toSearch() {var search_text = $("#search_text").val();if(!search_text){return;}addHistory(search_text);//添加历史记录search(search_text);//搜索}//调用后台进行搜索function search(search_text){window.location.href="https://www.csdn.net";}</scri-pt></head><body><!-- 头部搜索框及按钮 --><div class=><div class=><div class=><a href="javascri-pt:;" class=>取消</a><div class=><input placeholder="请输入关键词信息搜索" class=><a class=></a></div></div></div></div><div class=></div><div class=><!-- 头部标题 --><div class=><ul class=><li><b class=>搜索记录</b><a href="javascri-pt:;" onclick="emptyHistory()" class=></a></li></ul></div><!-- 用来显示搜索条目 --><div><ul id="history"></ul></div></div></body>
THE END






