使用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 相关文章推荐
js验证整数加保留小数点的简单实例
Dec 02 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
JQuery跳出each循环的方法
Apr 16 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
图解js图片轮播效果
Dec 20 Javascript
jquery实现界面无刷新加载登陆注册
Jul 30 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
详解Webpack DLL用法以及功能
Jul 11 Javascript
微信小程序getPhoneNumber获取用户手机号
Sep 29 Javascript
序列化模块json代码实例详解
Mar 03 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
代码分析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
PHP处理会话函数大总结
2015/08/05 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
js document.write()使用介绍
2014/02/21 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
python如何保存文本文件
2020/06/07 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
公司活动邀请函
2014/01/24 职场文书
一月红领巾广播稿
2014/02/11 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
2015大学生实训报告
2014/11/05 职场文书
导师鉴定意见
2015/06/05 职场文书
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers