使用jquery实现仿百度自动补全特效


Posted in Javascript onJuly 23, 2015

新建index.html文件,直接复制下面代码到新建的文件index.html里面,用浏览器访问,仅用于参考:

<!doctype html>
<html>
<meta charset="utf-8">
<style>
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
.auto_hidden {
width:204px;border-top: 1px solid #333;
border-bottom: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
position:absolute;
display:none;
}
.auto_show {
width:204px;
border-top: 1px solid #333;
border-bottom: 1px solid #333;
border-left: 1px solid #333;
border-right: 1px solid #333;
position:absolute;
z-index:9999; /* 设置对象的层叠顺序 */
display:block;
}
.auto_onmouseover{
color:#ffffff;
background-color:highlight;
width:100%;
}
.auto_onmouseout{
color:#000000;
width:100%;
background-color:#ffffff;
}
</style>
<script language="javascript">
<!--
var $ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
}
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}
function AutoComplete(obj,autoObj,arr){
this.obj=$(obj); //输入框
this.autoObj=$(autoObj);//DIV的根节点
this.value_arr=arr; //不要包含重复值
this.index=-1; //当前选中的DIV的索引
this.search_value=""; //保存当前搜索的字符
}
AutoComplete.prototype={
//初始化DIV的位置
init: function(){
this.autoObj.style.left = this.obj.offsetLeft + "px";
this.autoObj.style.top = this.obj.offsetTop + this.obj.offsetHeight + "px";
this.autoObj.style.width= this.obj.offsetWidth - 2 + "px";//减去边框的长度2px
},
//删除自动完成需要的所有DIV
deleteDIV: function(){
while(this.autoObj.hasChildNodes()){
this.autoObj.removeChild(this.autoObj.firstChild);
}
this.autoObj.className="auto_hidden";
},
//设置值
setValue: function(_this){
return function(){
_this.obj.value=this.seq;
_this.autoObj.className="auto_hidden";
}
},
//模拟鼠标移动至DIV时,DIV高亮
autoOnmouseover: function(_this,_div_index){
return function(){
_this.index=_div_index;
var length = _this.autoObj.children.length;
for(var j=0;j<length;j++){
if(j!=_this.index ){
_this.autoObj.childNodes[j].className='auto_onmouseout';
}else{
_this.autoObj.childNodes[j].className='auto_onmouseover';
}
}
}
},
//更改classname
changeClassname: function(length){
for(var i=0;i<length;i++){
if(i!=this.index ){
this.autoObj.childNodes[i].className='auto_onmouseout';
}else{
this.autoObj.childNodes[i].className='auto_onmouseover';
this.obj.value=this.autoObj.childNodes[i].seq;
}
}
}
,
//响应键盘
pressKey: function(event){
var length = this.autoObj.children.length;
//光标键"↓"
if(event.keyCode==40){
++this.index;
if(this.index>length){
this.index=0;
}else if(this.index==length){
this.obj.value=this.search_value;
}
this.changeClassname(length);
}
//光标键"↑"
else if(event.keyCode==38){
this.index--;
if(this.index<-1){
this.index=length - 1;
}else if(this.index==-1){
this.obj.value=this.search_value;
}
this.changeClassname(length);
}
//回车键
else if(event.keyCode==13){
this.autoObj.className="auto_hidden";
this.index=-1;
}else{
this.index=-1;
}
},
//程序入口
start: function(event){
if(event.keyCode!=13&&event.keyCode!=38&&event.keyCode!=40){
this.init();
this.deleteDIV();
this.search_value=this.obj.value;
var valueArr=this.value_arr;
valueArr.sort();
if(this.obj.value.replace(/(^\s*)|(\s*$)/g,'')==""){ return; }//值为空,退出
try{ var reg = new RegExp("(" + this.obj.value + ")","i");}
catch (e){ return; }
var div_index=0;//记录创建的DIV的索引
for(var i=0;i<valueArr.length;i++){
if(reg.test(valueArr[i])){
var div = document.createElement("div");
div.className="auto_onmouseout";
div.seq=valueArr[i];
div.onclick=this.setValue(this);
div.onmouseover=this.autoOnmouseover(this,div_index);
div.innerHTML=valueArr[i].replace(reg,"<strong>$1</strong>");//搜索到的字符粗体显示
this.autoObj.appendChild(div);
this.autoObj.className="auto_show";
div_index++;
}
}
}
this.pressKey(event);
window.onresize=Bind(this,function(){this.init();});
}
}
//-->
</script>
<body>
<div align="center" style="padding-top:50px">
<input type="text" style="width:300px;height:20px;font-size:14pt;" placeholder="请输入a或b模拟效果" id="o" onkeyup="autoComplete.start(event)">
</div>
<div class="auto_hidden" id="auto"><!--自动完成 DIV--></div>
<script>
var autoComplete=new AutoComplete('o','auto',['b0','b12','b22','b3','b4','b5','b6','b7','b8','b2','abd','ab','acd','accd','b1','cd','ccd','cbcv','cxf']);
</script>
</body>
</html>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
Jan 15 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
Apr 21 Javascript
js实现分割上传大文件
Mar 09 Javascript
浅谈jquery的map()和each()方法
Jun 12 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
原生js开发的日历插件
Feb 04 Javascript
浅谈React中的元素、组件、实例和节点
Feb 27 Javascript
Layui 设置select下拉框自动选中某项的方法
Aug 14 Javascript
使用layer模态框给新页面传值的方法
Sep 27 Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 Javascript
代码分析jQuery四种静态方法使用
Jul 23 #Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 #Javascript
HTML5实现留言和回复页面样式
Jul 22 #Javascript
javascript控制层显示或隐藏的方法
Jul 22 #Javascript
javascript实现简单查找与替换的方法
Jul 22 #Javascript
javascript数组随机排序实例分析
Jul 22 #Javascript
JavaScript对数组进行随机重排的方法
Jul 22 #Javascript
You might like
一个好用的分页函数
2006/11/16 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
PHP通过get方法获得form表单数据方法总结
2018/09/12 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JQuery魔力之$(&quot;tagName&quot;)与selector
2012/03/05 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
js图片预加载示例
2014/04/30 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
jquery判断iPhone、Android设备类型
2016/09/14 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
优秀实习生感言
2014/03/01 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
社区健康教育工作方案
2014/06/03 职场文书
稽核岗位职责范本
2015/04/13 职场文书
一起来学习Python的元组和列表
2022/03/13 Python
使用Django框架创建项目
2022/06/10 Python