原生js实现 搜索框 点击搜索 清空历史记录

实现思路

1.点击搜索框:注册点击事件
2.获取用户输入的值
3.将用户输入的值添加到本地存储:
    1)由于输入不止一个值且后期需要保存相关数据,故一定要存成数组或对象,所以要定义一个空数组
    2)由于值可能为空,在添加值到空数组之前,要先判断是否有值(可通过内容不为0/长度不为0/布尔值为true来判断)
4.将本地数据的值渲染到搜索记录列表
    1)用户输入的有值,就要判断本地数据是否有数据,没有返回空数组,有就获取本地数据,由于本地存储的方法需要保存为字符串格式,才能取出来,故需要把之前定义的数组转化为字符串,才能成功获取
    2)获取用户输入的值,放入数组中,再将有数据的数组存储到本地,此处需要转化为字符串
    3)数据获取后,再将输入框内容清除

实现效果
在这里插入图片描述
html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/index.css">
</head>
<body>
    <!-- 头部 -->
    <header>
        <input type="text" id="searchText">
        <button id="btn">搜索</button>
    </header>
    <!-- 内容 -->
    <main>
        <!-- 标题 -->
        <div class="title">
            <h3>搜索记录</h3>
            <span id="clearBtn">清空</span>
        </div>
        <!-- 列表 -->
        <ul id="list">
            
        </ul>
    </main>
    <script src="./js/index.js"></script>
</body>
</html>

js文件

/*
    1.点击搜索框:注册点击事件
    2.获取用户输入的值
    3.将用户输入的值添加到本地存储:
        1)由于输入不止一个值且后期需要保存相关数据,故一定要存成数组或对象,所以要定义一个空数组
        2)由于值可能为空,在添加值到空数组之前,要先判断是否有值(可通过内容不为0/长度不为0/布尔值为true来判断)
    4.将本地数据的值渲染到搜索记录列表
        1)用户输入的有值,就要判断本地数据是否有数据,没有返回空数组,有就获取本地数据,由于本地存储的方法需要保存为字符串格式,才能取出来,故需要把之前定义的数组转化为字符串,才能成功获取
        2)获取用户输入的值,放入数组中,再将有数据的数组存储到本地,此处需要转化为字符串
        3)数据获取后,再将输入框内容清除

*/
window.addEventListener("load",function(){

    //获取节点
    let searchText=document.querySelector("#searchText");
    let btn = document.querySelector("#btn");
    let clearBtn = document.querySelector("#clearBtn");
    let list = document.querySelector("#list")
    // console.log(searchText,btn,clearBtn,list);
    //给搜索框添加点击事件
    btn.addEventListener("click",function(){
        // console.log(111)
        //获取用户输入的值
        let val = searchText.value;
        //判断用户是否输入有值
        if(val){
            //用户输入有值,则获取本地数据,本地数据为字符串对象,需要转化为真对象才能取出,用户输入没有值,则返回一个空数组到本地数据用于存储接下来用户的搜索数据   
            let localData = JSON.parse(localStorage.getItem("searchData")) || [];
            //将用户输入的值放到localData数组中
            localData.unshift(val);
            //再将数据存储到存储到本地,存储到本地数据格式需要为字符串
            localStorage.setItem("searchData",JSON.stringify(localData));
            //获取数据后,将输入框的数据清除
            searchText.value='';

            //回调函数,动态渲染
            render();
        }

        //封装函数动态渲染
        function render(){
            //获取本地数据
            let localData = JSON.parse(localStorage.getItem("searchData"));
            //判断数据不为空,再进行渲染
            if(localData){
                //清空列表后再遍历渲染
                list.innerHTML='';
                //遍历数组
                localData.forEach(function(v){
                    //将每一个值进行渲染
                    list.innerHTML +=`
                        <li>${v}</li>
                    `;
                })
            }
        }
        render();
    })


    //给清空按钮注册点击事件
    clearBtn.addEventListener("click",function(){
        //清空本地存储
        localStorage.clear();
        //删除列表所有内容
        list.innerHTML=``;
    })


})
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以的,可以通过保存历史搜索记录的方式,在用户点击历史搜索记录时,将历史搜索记录中的文本填入搜索框中,然后再通过代码触发搜索操作。下面是一个简单的示例代码: ```html <!-- 搜索表单 --> <form id="search-form"> <input type="text" id="search-input" placeholder="搜索..."> <button type="submit">搜索</button> </form> <!-- 历史搜索记录列表 --> <ul id="search-history"> <li>搜索记录1</li> <li>搜索记录2</li> <li>搜索记录3</li> </ul> <script> // 获取搜索表单和历史搜索记录列表 const searchForm = document.getElementById('search-form'); const searchInput = document.getElementById('search-input'); const searchHistory = document.getElementById('search-history'); // 从本地存储中获取历史搜索记录 const history = JSON.parse(localStorage.getItem('search_history')) || []; // 显示历史搜索记录 history.forEach(item => { const li = document.createElement('li'); li.textContent = item; searchHistory.appendChild(li); }); // 点击历史搜索记录时,填入搜索框搜索 searchHistory.addEventListener('click', event => { const target = event.target; if (target.nodeName === 'LI') { searchInput.value = target.textContent; searchForm.submit(); // 触发搜索操作 } }); // 提交搜索表单时,保存搜索记录到本地存储 searchForm.addEventListener('submit', event => { event.preventDefault(); const keyword = searchInput.value.trim(); if (keyword) { // 将搜索关键字添加到历史搜索记录中 history.unshift(keyword); // 最多保存10条历史搜索记录 history.splice(10); // 将历史搜索记录保存到本地存储中 localStorage.setItem('search_history', JSON.stringify(history)); // 触发搜索操作 // ... } }); </script> ``` 这段代码实现了一个简单的搜索功能,包括保存历史搜索记录和点击历史搜索记录进行搜索的功能。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值