用js实现输入提示(自动完成)的实例代码


Posted in Javascript onJune 14, 2013
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>autoComplete</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
.autoComplete {margin:8px;position:relative;float:left;}
.autoComplete input {width:200px;height:25px;margin:0;padding:0;line-height:25px;}
.autoComplete ul {z-index:-12;padding:0px;margin:0px;border:1px #333 solid;width:200px;background:white;display:none;position:absolute;left:0;top:28px;*margin-left:9px;*margin-top:2px;margin-top:1px;}
.autoComplete li {list-style:none;}
.autoComplete li a {display:block;color:#000;text-decoration:none;padding:1px 0 1px 5px;_width:97%;}
.autoComplete li a:hover {color:#000;background:#ccc;border:none;}
</style>
<script type="text/javascript">
//<![CDATA[
var getElementsByClassName = function (searchClass, node, tag) {/* 兼容各浏览器的选择class的方法;(:https://3water.com,想了解更多请看这个地址) */
    node = node || document, tag = tag ? tag.toUpperCase() : "*";
    if(document.getElementsByClassName){/* 支持getElementsByClassName的浏览器 */
        var temp = node.getElementsByClassName(searchClass);
        if(tag=="*"){
            return temp;
        } else {
            var ret = new Array();
            for(var i=0; i<temp.length; i++)
                if(temp[i].nodeName==tag)
                    ret.push(temp[i]);
            return ret;
        }
    }else{/* 不支持getElementsByClassName的浏览器 */
        var classes = searchClass.split(" "),
            elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),
            patterns = [], returnElements = [], current, match;
        var i = classes.length;
        while(--i >= 0)
            patterns.push(new RegExp("(^|s)" + classes[i] + "(s|$)"));
        var j = elements.length;
        while(--j >= 0){
            current = elements[j], match = false;
            for(var k=0, kl=patterns.length; k<kl; k++){
                match = patterns[k].test(current.className);
                if(!match) break;
            }
            if(match) returnElements.push(current);
        }
        return returnElements;
    }
};
var addEvent=(function(){/* 用此函数添加事件防止事件覆盖 */
    if(document.addEventListener){
        return function(type, fn){ this.addEventListener(type, fn, false); };
    }else if(document.attachEvent){
        return function(type,fn){
            this.attachEvent(on+type, function () {
                return fn.call(this, window.event);/* 兼容IE */
            });
        };
    }
})();
;(function(window){
/* 插件开始 */
var autoComplete=function(o){
    var handler=(function(){
        var handler=function(e,o){ return new handler.prototype.init(e,o); };/* 为每个选择的dom都创建一个相对应的对象,这样选择多个dom时可以很方便地使用 */
        handler.prototype={
            e:null, o:null, timer:null, show:0, input:null, popup:null,
            init:function(e,o){/* 设置初始对象 */
                this.e=e, this.o=o,
                this.input=this.e.getElementsByTagName(this.o.input)[0],
                this.popup=this.e.getElementsByTagName(this.o.popup)[0],
                this.initEvent();/* 初始化各种事件 */
            },
            match:function(quickExpr,value,source){/* 生成提示 */
                var li = null;
                for(var i in source){
                    if( value.length>0 && quickExpr.exec(source[i])!=null ){
                        li = document.createElement(li);
                        li.innerHTML = <a href="javascript:;">+source[i]+</a>;
                        this.popup.appendChild(li);
                    }
                }
                if(this.popup.getElementsByTagName(a).length)
                    this.popup.style.display=block;
                else
                    this.popup.style.display=none;
            },
         &n
Javascript 相关文章推荐
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 Javascript
在javascript中关于节点内容加强
Apr 11 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
JavaScript制作简单的日历效果
Mar 10 Javascript
详解javascript跨浏览器事件处理程序
Mar 27 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
May 19 Javascript
vue实现评价星星功能
Jun 30 Javascript
jsp+javascript打造级连菜单的实例代码
Jun 14 #Javascript
JavaScript实现网页上的浮动广告的简单方法
Jun 14 #Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
Jun 13 #Javascript
JQuery 操作/获取table具体代码
Jun 13 #Javascript
js获取dom的高度和宽度(可见区域及部分等等)
Jun 13 #Javascript
如何使Chrome控制台支持多行js模式——意外发现
Jun 13 #Javascript
jQuery插件的写法分享
Jun 12 #Javascript
You might like
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
2015/11/24 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
初步解析Python中的yield函数的用法
2015/04/03 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
使用pandas读取文件的实现
2019/07/31 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
MySQL常见优化方案汇总
2022/01/18 MySQL