原生js仿百度搜索框

来源:互联网 发布:网络与新媒体大学 编辑:程序博客网 时间:2024/06/06 08:24
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        fieldset, img, input, button {
            border: none;
            padding: 0;
            margin: 0;
            outline-style: none;
        }


        ul, ol {
            list-style: none;
            margin: 0px;
            padding: 0px;
        }


        #box {
            width: 405px;
            margin: 200px auto;
            position: relative;
        }


        #txtSearch {
            float: left;
            width: 300px;
            height: 32px;
            padding-left: 4px;
            border: 1px solid #b6b6b6;
            border-right: 0;
        }


        #btnSearch {
            float: left;
            width: 100px;
            height: 34px;
            font: 400 14px/34px "microsoft yahei";
            color: white;
            background: #3385ff;
            cursor: pointer;
        }


        #btnSearch:hover {
            background: #317ef3;
        }


        #pop {
            width: 303px;
            border: 1px solid #ccc;
            padding: 0px;
            position: absolute;
            top: 34px;
        }


        #pop ul li {
            padding-left: 5px;
        }


        #pop ul li:hover {
            background-color: #CCC;
        }
    </style>
</head>
<body>
<div id="box">
    <input type="text" id="txtSearch">
    <input type="button" value="百度一下" id="btnSearch">
</div>
<script>
    //找人
    var box = document.getElementById("box");
    var txt = document.getElementById("txtSearch");
    //模拟从后台获取到的数据
    var datas = ["a", "abc", "abbbb", "abxxxx", "xyz", "abcdef", "abzzzz"];
    //1.用户输入的同时 从datas中 寻找符合要求的 项目 放到一个新数组中
    txt.onkeyup = function () {
        var val = this.value;//获取当前文本框中的内容
        //1.1从datas中 寻找符合要求的 项目 放到一个新数组中
        var filterArr = [];
        //1.2遍历datas里面的每一项 判断是否符合要求 如果符合要求 就放到新数组中
        for (var i = 0; i < datas.length; i++) {
            var data = datas[i];//原数组的每一项数据
            //判断每一个data是否以当前的val开头
            if (data.indexOf(val) === 0) {//符合要求
                filterArr.push(data);
            }
        }
        console.log(filterArr);
        //3.改bug
        //3.1根据匹配数组创建结构之前先判断一下页面上是否已经存在pop了
        var popDiv = document.getElementById("pop");
        if (popDiv) {
            //如果进来了 说明已经有了 就要把他干掉
            box.removeChild(popDiv);
        }
        //3.2如果没有匹配项 就不要创建pop了
        if (filterArr.length === 0) {
            return;
        }
        //3.3如果是空字符串 就不创建了
        //if(val.length===0)
        if (val === "") {
            return;
        }
        //2.根据数组创建结构
        var popDiv = document.createElement("div");
        popDiv.id = "pop";
        box.appendChild(popDiv);
        var ul = document.createElement("ul");
        popDiv.appendChild(ul);
        //2.2根据过滤后的数组中的每一项数据创建li
        for (var i = 0; i < filterArr.length; i++) {
            //filterArr[i];//每一项数据
            var li = document.createElement("li");
            ul.appendChild(li);
            li.innerText = filterArr[i];
        }
    };


    //todo:当前li高亮用JS实现
    //todo:点击后把当前li内容放到文本框中
    //todo:用上下键选择内容(涉及到事件对象)(有兴趣可以研究一下)


</script>
</body>
</html>
原创粉丝点击