<!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 » 模拟百度输入框的效果