仿百度搜索,匹配历史搜索

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>历史搜索</title>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<style>
.search_content{
    overflow: hidden;
    float: left;
    width: 720px;
}
.sso_wk{
    width: 582px;
    height: 32px;
    border: 1px solid #b6b6b6;
    float: left;
    outline: none;
    padding: 0 10px;
}
.sso_an{
    width: 100px;
    height: 34px;
    color: #fff;
    letter-spacing: 1px;
    background: #3385ff;
    border:none;
    float: left;
}
.sslb{
    width: 602px;
    border: 1px solid #b6b6b6;
    float: left;
    border-top:none;
}
.sslb ul{
    list-style: none;
    float: left;
    margin: 0;
    padding: 0;
    width: 100%;
}

.sslb ul li{
    height:30px;
    line-height:30px;
    font-size:14px;
    padding: 0 10px;
}

.sslb ul li:hover{
    background:#f8f8f8;
}

.scls{
    float:right;
    color:#3385ff;
    background:#fff;
    border:none;
    cursor: pointer;
}
</style>
<body>
<div class="search_content">
    <input name="keywords" id="keywords" type="text" class="sso_wk" x-webkit-speech="" autofocus placeholder="请输入搜索内容">
    <input name="" class="sso_an" type="button" onclick="SiteSearch();" value="搜索">
    <div class="sslb" style="display:none">
        <ul id="lssslb"> </ul>
    </div>
</div>
<script type="text/javascript">
var searchInput = document.getElementById("keywords");
var bgDiv = document.getElementsByClassName("search_content")[0];
var searchResult = document.getElementById("lssslb");
var timer = null;
//注册输入框键盘抬起事件
searchInput.onkeyup = function (e) {
    // 如果输入框内容为空
    if (this.value.length === 0) {
        closeFind();
        return;
    } else{
        find();
    }
    if (this.timer) {
        clearTimeout(this.timer);
    }
//    if (e.keyCode !== 40 && e.keyCode !== 38) {
//        // 函数节流优化
//        this.timer = setTimeout(() => {
//            SiteSearch();
//        }, 130)
//    }
};

// 事件委托 点击li标签或者点击搜索按钮跳转到百度搜索页面
bgDiv.addEventListener("click", function (e) {
    if (e.target.nodeName.toLowerCase() === ‘li‘) {
        var keywords = e.target.innerText;
        searchInput.value = keywords;
        SiteSearch();
    } else if (e.target.id === ‘btn‘) {
        SiteSearch();
    }
}, false);

var i = 0;
var flag = 1; 

// 事件委托 监听键盘事件
bgDiv.addEventListener("keydown", function (e) {
    var size = searchResult.childNodes.length;
    if (e.keyCode === 13) {
        SiteSearch();
    }; 

    // 键盘向下事件
    if (e.keyCode === 40) {
        if (flag === 0) {
            i = i + 2;
        }
        flag = 1;
        e.preventDefault();
        if (i >= size) {
            i = 0;
        } if (i < size) {
            var n=i++;
            searchInput.value = searchResult.childNodes[n].innerText;
            searchResult.childNodes[n].style.background="#f8f8f8";
        }
    }; 

    // 键盘向上事件
    if (e.keyCode === 38) {
        if (flag === 1) {
            i = i - 2;
        }
        flag = 0;
        e.preventDefault();
        if (i < 0) {
            i = size - 1;
        }
        if (i > -1) {
            var n=i--;
            searchInput.value = searchResult.childNodes[n].innerText;
            searchResult.childNodes[n].style.background="#f8f8f8";
        }
    };
}, false); 

//搜索并存值
function SiteSearch(){
    var sszd = $("#keywords").val();
    setHistoryItems(sszd);
    console.log(sszd);
    //location.href=thisurl+"&sszd="+sszd+"";
};

//匹配历史搜索
function find(){
    var str=localStorage.historyItems;
    var s = ‘‘;
    var keywords=$("#keywords").val();
    if(str!=undefined){
        var strs= new Array();
        strs=str.split("|");
        for(var i=0;i<strs.length;i++){
            if(strs[i].trim().length>0 && strs[i].indexOf(keywords)!=-1){
                 s+= ‘<li onclick="changekeywords(\‘‘+strs[i]+‘\‘)" >‘+strs[i]+‘</a></li>‘;
            }
        }
        if(str.trim().length>0){
            $(".sslb").show();
            $("#lssslb").html(s+‘<input type="button" class="scls" onclick="clearHistory();" value="清除历史记录">‘);
        }
   }

}

//隐藏搜索选择栏
function closeFind(){
    $(".sslb").hide();
    $("#lssslb").empty();
}

//改变搜索框值
function changekeywords(keywords){
    $("#keywords").val(keywords);
    $(".sslb").hide();
    $("#lssslb").empty();
}

//存值方法,新的值添加在首位
function setHistoryItems(keyword) {
    let { historyItems } = localStorage;
    if (historyItems === undefined) {
        localStorage.historyItems = keyword;
    } else {
        historyItems = keyword + ‘|‘ + historyItems.split(‘|‘).filter(e => e != keyword).join(‘|‘);
        localStorage.historyItems = historyItems;
    }
};

//清除值
function clearHistory() {
    localStorage.removeItem(‘historyItems‘);
    var div = document.getElementById("lssslb");
    while(div.hasChildNodes()) //当div下还存在子节点时 循环继续
    {
        div.removeChild(div.firstChild);
    }
    $(".lssslb").append(‘<div class="rmssts">暂无搜索记录</div>‘);
}

//点击页面任何其他地方 搜索结果框消失
document.onclick = () => closeFind();
</script>
</body>
</html>

原文地址:https://www.cnblogs.com/instelly/p/10563150.html

时间: 2024-08-11 09:15:58

仿百度搜索,匹配历史搜索的相关文章

C# 仿百度自动匹配

  using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1()

仿百度首页并实现搜索功能

学了html和css之后没有做过什么大的项目,没有什么项目经验,所以决定从小的项目做起,然后做大的项目,循序渐进,增加自己的项目经历和增强自己的动手能力. 百度首页没有特别多的东西,所以仿起来比较容易,但是要做到完全一模一样还是要花费一些功夫的. 一 做一些准备工作: 1 编辑器:webstorm,浏览器:Chrome; 2 利用Chrome的Image downloader插件抓取百度首页的图片,作为素材. 3编程实现 二 项目的文件结构 百度首页 .├── css│   └── index.

仿百度自动补全搜索框效果(*附有源码下载)

页面效果及代码,(源码在下面的下载链接) <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="css/semantic.css"> <script type="text/javascript" src="jquery-autocomplete/jquery

浅谈asp.net通过本机cookie仿百度(google)实现搜索input框自动弹出搜索提示

对于通过用户输入关键词实现自动弹出相关搜索结果,这里本人给两种解决方案,用于两种不同的情形. 常见方法是在数据库里建一个用户搜索关系表,然后通过用户搜索框输入的关键字异步调用数据表中的相关数据,显示在一个隐藏div中. 第二种方式也就是我现在着重讨论的方式,适用于单个用户,基于此用户以往的搜索数据来实现搜索提示功能.技术关键是记录下用户的以往搜索数据,写入cookie,然后页面从用户本机cookie调用数据. ok,下面进入正题.本文主要讲实现步骤,代码可根据自己实际需要更改. 一,如何写入co

angular的仿百度搜索功能

尝试一下调用百度的搜索功能,这部分主要是练习$http. 首先HTML部分: <div ng-app="myApp" ng-controller="Aaa""> <input type="text" ng-model="name" ng-keyup="change(name)" placeholder="请输入搜索内容">//内容的搜索框 <inp

仿百度壁纸client(五)——实现搜索动画GestureDetector手势识别,动态更新搜索keyword

仿百度壁纸client(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager + Fragment 仿百度壁纸client(二)--主页自己定义ViewPager广告定时轮播图 仿百度壁纸client(三)--首页单向.双向事件冲突处理,壁纸列表的实现 仿百度壁纸client(四)--自己定义上拉载入实现精选壁纸墙 仿百度壁纸client(五)--实现搜索动画Gesture

仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字

仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 我们重新来看看这个效果 想实现这个逻辑,其实就是监听两个View的显示隐藏加上一点小动画,所以我们在布局上是这样的 search_fragment.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.c

vue-resource使用 (vue仿百度搜索)

1.this.$http.get()方法2.this.$http.post()方法3.this.$http.jsonp()方法 (vue仿百度搜索) 在输入框中输入a, 然后在百度f12 ==> network ==> 复制js https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&json=1&p=3&sid=1440_25548_21098_20719&req=2&csor=1&c

百度和 Google 的搜索技术是一个量级吗?

著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Kenny Chao 链接:http://www.zhihu.com/question/22447908/answer/21435705 来源:知乎 很多答案是从使用上讲的,我加两个技术方面的. 搜索引擎需要对抓取到的结果进行管理.当索引结果越来越多时,保证存储和查询速度,保证数万台服务器内容一致的难度越来越高.Google于03至06年左右公布了三篇论文,描述了GFS.BigTable.MapReduce三种技术以解