模拟百度输入框的效果

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>百度搜索框</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #box {
            width: 400px;
            margin: 200px auto;
            /*border: 1px solid #000;*/
        }

        #txtSearch {
            width: 300px;
        }

        #pop {
            width: 300px;
            border: 1px solid red;
            padding: 0px;
        }

        #pop ul {
            list-style-type: none;
            margin: 5px;
            padding: 0px;
        }

    </style>
</head>
<body>
<div id="box">
    <input type="text" value="" id="txtSearch"/>
    <input type="button" value="搜索" id="btnSearch"/>
    <!--<div id="pop">
        <ul>
            <li>a</li>
            <li>ab</li>
            <li>abc</li>
            <li>abcd</li>
            <li>abcde</li>
            <li>amm</li>
        </ul>-
    </div>-->
</div>
</body>
</html>
<script>

//与获取文本或是设置文本相关的对象
var Txt = {
    getText: function (ele) {
        if (typeof ele.innerText == "string") {
            return ele.innerText;//将获取的文本内容返回
        } else {
            return ele.textContent;
        }
    },
    setText: function (ele, value) {
        // 能力检测:就是要看当前的浏览器是否支持此对象的属性或是方法
        if (typeof ele.innerText == "string") {
            ele.innerText = value;
        } else { // textContent
            ele.textContent = value;
        }
    }
}

    // 当我们在输入框中键盘按下,并抬起的时候,就会向服务器发送一条ajax请求,去服务器的
    //数据库中查询以用户输入的内容为开头的数据,如果找到了,则将这些数据返回给浏览器,渲染到指定的位置

    // 用本地数组模拟一下数据库
    var strs =["a","ab","abc","abcd","abcde","acc","amm","mmm","kkk"];

    // 1. 键盘按下并抬起的时候,获得用户输入的数据
    // 2. 拿着用户输入的数据,去数据库搜索以用户输入的内容为开头的数据
    // 3. 找到以用户输入的内容为开头的数据,存入新的容器中
    // 4. 根据匹配到的数据(根据新数组的长度,来动态的生成列表中的li),动态的生成列表
    // 5. 判断特殊情况

    var txtSearch=document.getElementById('txtSearch');
    var box=document.getElementById('box');

    txtSearch.onkeyup=function(){
        var value=txtSearch.value;

//       过滤
        var filter=[];
        for(var i=0;i<strs.length;i++){
            if(strs[i].indexOf(value)==0){
                filter.push(strs[i]);
            }
        }
//        判断有没有pop盒子,有就先清除掉,再创建
        var pop=document.getElementById('pop');
        if(pop){
            box.removeChild(pop);
        }
        if(!filter.length){
            return;
        }
        if(!value){
            return;
        }

//        动态创建
        pop=document.createElement('div');
        pop.setAttribute('id','pop');
        var ul=document.createElement('ul');
        pop.appendChild(ul);
        box.appendChild(pop);

//        动态创建li
        for(var j=0;j<filter.length;j++){
            var li=document.createElement('li');
            Txt.setText(li,filter[j]);
            ul.appendChild(li);

            li.onmouseover=function(){
                this.style.backgroundColor='#c0c0c0';
            }
            li.onmouseout=function(){
                this.style.backgroundColor='#fff';
            }
            li.onclick=function(){
                txtSearch.value=Txt.getText(this);
                this.parentNode.parentNode.style.display='none';
            }
        }

    }

</script>

欢迎分享本文,转载请保留出处:前端ABC » 模拟百度输入框的效果

分享到:更多 ()

发表评论 0