本文介绍如何使用JavaScript结合localStorage实现搜索框的历史记录功能。通过监听输入框的焦点事件,从本地存储读取并渲染历史数据;在提交搜索时,将新关键词存入localStorage,并限制最大历史记录数量。示例代码包含HTML结构、CSS样式及jQuery实现的逻辑,帮助开发者快速掌握前端本地存储的应用。
功能效果展示
首先,查看功能实现的效果图(此处忽略样式细节)

HTML结构实现
HTML结构代码
<form id="hisform">
<div id="searchbox">
<input id="inpt" type="text" autocomplete="off" />
<input id="btn" type="button" value="搜索" />
<div id="historybox">
<h3>搜索记录:</h3>
//用于保存记录信息
<ul id="list">
</ul>
</div>
</div>
</form>
CSS样式设计
CSS样式代码
* {
margin: 0;
padding: 0;
}
input {
border: 0;
vertical-align: middle;
float: left;
}
#searchbox {
width: 300px;
height: 50px;
background: #fff;
margin: 100px auto;
border: 1px solid #ccc;
position: relative;
}
#inpt {
width: 240px;
height: 50px;
outline: none;
text-indent: 10px;
}
#btn {
width: 60px;
height: 50px;
cursor: pointer;
}
/* 历史记录框 */
#historybox {
width: 280px;
padding: 10px 10px 50px;
border: 1px solid #ccc;
position: absolute;
top: 50px;
left: -1px;
/* 隐藏 */
display: none;
}
#historybox h3 {
margin-bottom: 10px;
}
#list {
list-style: none;
}
#list .on {
float: left;
border: 1px solid #ccc;
background: #aaa;
height: 30px;
line-height: 30px;
margin: 0 2px;
border: 1px solid #ccc;
border-radius: 5px;
}
#list .active {
color: #fff;
text-decoration: none;
padding: 2px;
}
JavaScript逻辑实现
JavaScript逻辑代码(需引入jQuery库)
$(function () {
let max_history = 7;// 存储最大历史数据
// 鼠标移入事件
$('#inpt').on('focus', function () {
$('inpt').val = '';
let data = localStorage.getItem('data'); //从本地存储中读取数据
if (!data) {
$('#historybox').css('display', 'none');
} else {
$('#historybox').css('display', 'block');
historydata(JSON.parse(data)); // 渲染数据
}
})
// 鼠标移出事件
$('#inpt').on('blur', function () {
$('#historybox').css('display', 'none');
init_history();// 初始化历史记录,清空记录
})
//点击搜索按钮时,将搜索内容添加到本地存储
$('#btn').on('click', function () {
var search = inpt.value;
var data = localStorage.getItem('data'); //从本地存储中读取数据
if (data) {
var arr = JSON.parse(data); //如果有数据则转换成对象或数组
} else {
var arr = []; //如果没有数据,则新增一条
}
arr.push(search);
removalDuplicate(arr);// 对用户输入值进行处理(去重-筛选)
localStorage.setItem('data', JSON.stringify(arr)); //将数据写入到本地存储中
})
// 数组去重-筛选函数
function removalDuplicate(arr) {
for (let i = 0; i < arr.length; i++) {
var arritem = arr[i].trim(); // 去除字符串两端空格
// 如果值为空,则不添加
if (arritem == '') {
arr.splice(i, 1);
}
if (arritem !== "") {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(i, 1);//如果第二次输入的值与第一次相同,则添加第二次的值
}
}
}
}
return arr;
}
// 渲染数据
function historydata(searchArr) {
searchArr.reverse();//反转,从后往前添加
// 遍历出数据
if (searchArr.length <= max_history) {//如果存储数据小于等于max_history,则遍历渲染
for (let i = 0; i < searchArr.length; i++) {
$('#list').append(`<li class='on'><a href='#' class='active'>${searchArr[i]}</a><li>`);
}
} else {//否则渲染最大历史记录条数
for (let i = 0; i < max_history; i++) {
$('#list').append(`<li class='on'><a href='#' class='active'>${searchArr[i]}</a><li>`);
}
}
}
// 初始化-清空历史记录
function init_history() {
$('#list').html('');
}
})
功能总结与注意事项
功能总结
以上介绍了使用JS location实现搜索框历史记录功能的具体方法,希望能对大家有所帮助。如有疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持! 如果本文对您有帮助,欢迎转载,请注明出处,谢谢!