实现搜索框功能(将搜索关键字标红,点击就加入到文本框中)

类似于百度的搜索框,当输入一个字或词的时候,自动检索有没有该内容,有的话把输入的关键字标红

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>百度搜索框设置</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .header {
            width: 500px;
            margin: 50px auto;
        }
        
        #search {
            width: 250px;
            height: 36px;
        }
        
        #btn {
            height: 40px;
            width: 75px;
            margin-left: -5px;
        }
    </style>
</head>

<body>
    <div class="header" id="header">
        <input type="text" value="" placeholder="输入内容" id="search">
        <input type="button" value="搜索" id="btn">
    </div>
</body>
<script src="../js/common.js"></script>
<script>
    // var keywords=["路遥知马力日久见人心","年轻正好","百年孤独","钢铁是怎么炼成的","海底两万里","资治通鉴"];
    var arr = "潘石屹 | 王 石 | 蒋锡培 | 向文波 | 牛根生 | 熊晓鸽 | 王冉 | 于清教 | 谢清海 | 刘旗辉 |刘步尘 | 陈达夫 | 船长 | 叶茂中 |  李士福 | 王进生 | 任志强 | 付伟 | 孙虹钢 |  宋新宇  |   王 微  | 翁向东 | 周济谱 | 袁岳 | 成君忆 | 艾学蛟 | 雷永军 | 刘秋华 | 宋炜 | 刘东华 |科特勒 | 陈志列 | 张巨峰 | 姚日来 | 李朝曙 | 刘兴亮 | 沧海 | 曾玉 | 姜汝祥 | 徐浩然 | 邓国坚|辜胜阻 | 范以锦 | 郭梓林 | 秦合舫 | 王育琨 | 王辉耀 | 胡奎 | 华仔 | 韩耀国 | 唐清建 |曲向东 | 李志起 | 吴伯凡 | 景素奇 | 贾昌荣 | 林国峰 | 沈坤 | 刘贤方 | 周永亮 | 马向阳 | 辜胜阻 | 范以锦 | 郭梓林 | 秦合舫 | 王育琨 | 王辉耀 | 胡奎 | 华仔 | 韩耀国 | 唐清建 |曲向东 | 李志起 | 吴伯凡 | 景素奇 | 贾昌荣 | 林国峰 | 沈坤 | 刘贤方 | 周永亮 | 马向阳 |熊焰 | 唐崇健 | 王广伟 | 孔繁任 | 刘孝全 | 徐浩然 | 沈青 ";
    // var arrName=arr.split("|");
    var keywords = arr.split("|");
    myId("search").onkeyup = function() {
        //每次键盘抬起,检测是否有  div  ,有就删除
        if (myId("dv")) {
            myId("header").removeChild(myId("dv"));
        }
        var text = this.value; //获取文本框中输入的内容
        var tempArr = []; //临时数组,存放对应数组上的数据
        for (var i = 0; i < keywords.length; i++) {
            if (keywords[i].indexOf(text) != -1) { //如果数组中有输入的字
                tempArr.push(keywords[i]);
            }
        }
        if (this.value.length == 0 || tempArr.length == 0) { //检测文本框中是否有内容
            if (myId("dv")) { //文本框没有内容的话,如果有div,则删除
                myId("header").removeChild(myId("dv"));
            }
            return;
        }
        var dvObj = document.createElement("div"); //创建div
        myId("header").appendChild(dvObj);
        dvObj.id = "dv";
        dvObj.style.width = "252px";
        // dvObj.style.height="100px";
        dvObj.style.border = "1px solid green";
        for (var i = 0; i < tempArr.length; i++) {
            var pObj = document.createElement("p"); //div 中添加p
            dvObj.appendChild(pObj);
            pObj.innerText = tempArr[i];
            pObj.style.cursor = "pointer";
            pObj.style.marginTop = "3px";
            pObj.style.marginLeft = "3px";
            // var array = pObj.innerHTML.split("");    //将一段字符串分割成单个字的数组
            // pObj.innerHTML.replace(/(年)/igm,"<span style='color: red;'>$&</span>");
            var reg = new RegExp("(" + text + ")", "g"); //正则表达式
            var newstr = pObj.innerHTML.replace(reg, "<span style='color: red;'>$1</span>"); //让内容中与输入的内容相同的部分显示为红色
            // document.write(newstr + "<br />");
            pObj.innerHTML = newstr;
            pObj.onmouseover = function() {
                this.style.backgroundColor = "yellow";
            }
            pObj.onmouseout = function() {
                this.style.backgroundColor = "";
            }
            pObj.onclick = function() {
                myId("search").value = this.innerText
                myId('header').removeChild(dvObj)
                    // console.log(this.innerText)
            }
        }
    }
</script>

</html>

效果图如下方所示

 

common.js里面封装代码:

function myId(id) {

    return document.getElementById(id);

}

 

将搜索的关键词标红的代码为:

 var reg = new RegExp("(" + text + ")", "g"); //正则表达式
 var newstr = pObj.innerHTML.replace(reg, "<span style='color: red;'>$1</span>"); //让内容中与输入的内容相同的部分显示为红色

其中$1为输入的那个关键字

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值