描述:当用户输入要搜索的内容的时候,程序会自动识别用户输入的内容,并且与已有的数据进行对比,如果已有数据是以用户输入的内容开头的,就会在输入内容的下方进行提示,用户点击提示语,内容会自动填入输入框,并隐藏其他提示语。
示例代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模拟百度搜索</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .box {
            width: 500px;
            margin: 200px auto;
        }
        ul {
            width: 392px;
            padding: 5px;
            list-style: none;
            border: 1px solid red;
        }
        li:hover {
            background-color: red;
        }
        input {
            width: 400px;
        }
        button {
            width: 70px;
        }
    </style>
</head>
<body>
<div class="box">
    <input type="text">
    <button>搜索</button>
</div>
</body>
</html>
<script>
    //模拟从服务器获取的资源
    var arr = ["a","ab","abc","abcd","aa","aaa"];
    //获取相关元素
    var box = document.getElementsByClassName("box")[0];
    var inp = document.getElementsByTagName("input")[0];
    //绑定事件(键盘弹起事件)
    inp.onkeyup = function () {
        var newArr = [];//创建一个新数组来存放要显示的li内容
        /**
         * 循环进行比较,数组中的内容是否以输入的内容开头
         */
        for(var i = 0;i<arr.length;i++){
            var val = this.value;
            if (arr[i].indexOf(val)===0){
                newArr.push("<li>"+arr[i]+"</li>");
            }
        }
        //把数组转换成字符串
        var str = newArr.join("");
        //判断ul是否存在
        if (box.children[2]){
            box.removeChild(box.children[2]);
        }
        //如果输入内容为空,或者没有以输入内容为空的元素就切断函数
        if (this.value.length===0||newArr.length===0){
            return;
        }
        //创建ul标签,并且加入到适当的位置
        var ul = document.createElement("ul");
        ul.innerHTML = str;
        box.appendChild(ul);
        //获取所有的li,点击li的时候,为input表单赋值,并且隐藏下面的提示
        var liArr = document.getElementsByTagName("li");
        for (var i = 0; i<liArr.length;i++){
            console.log(i);
            liArr[i].onclick = function () {
                inp.value = this.innerHTML;
                box.removeChild(box.children[2]);
            }
        }
    }

</script>
Last modification:April 7, 2018
If you think my article is useful to you, please feel free to appreciate