使用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对象所有属性和方法的函数
Oct 16 Javascript
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
Javascript中的默认参数详解
Oct 22 Javascript
js通过iframe加载外部网页的实现代码
Apr 05 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
Vue.js双向绑定操作技巧(初级入门)
Dec 27 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
js实现京东轮播图效果
Jun 30 Javascript
vue计算属性computed的使用方法示例
Mar 13 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
vue 集成jTopo 处理方法
Aug 07 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
php设计模式 Template (模板模式)
2011/06/26 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
村庄绿化方案
2014/05/07 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
二手车转让协议书
2015/01/29 职场文书
个人廉洁自律总结
2015/03/06 职场文书
城南旧事电影观后感
2015/06/16 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
如何用PHP实现多线程编程
2021/05/26 PHP