首页 > web前端 > js教程 > 正文

基于javascript实现的搜索时自动提示功能_javascript技巧

php中文网
发布: 2016-05-16 16:24:14
原创
1208人浏览过

当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享:

效果图:

功能描述:

按下键盘后及时搜索条目中的汉字,汉字对应的拼音和号码;

实现思路:

立即学习Java免费学习笔记(深入)”;

先将条目中的汉字转换成拼音,然后将汉字,拼音,数字拼接成规律的字符串,放入数组,然后每次按下键盘后判断 input 中的值是汉字,拼音,还是数字,然后按固定的规律去循环数组,这样就能找到对应的条目了;

启用方式:

// search-test-inner --->  最外层div
// search-value --->  input 输入框
// search-value-list --->  搜索结果显示div
// search-li --->  搜索条目
new SEARCH_ENGINE("search-test-inner","search-value","search-value-list","search-li");
注意:搜索条目加上两个临时数据,data-name 和 data-phone ,用来存储汉字和数字。

说明:拼音的转换用到了一个叫 jQuery.Hz2Py-min.js 的插件,由于这个插件只能转换 input 里的值,所以代码里多了一个步骤,先将值放入一个临时的 input ,再转换。

轩宇淘宝客系统
轩宇淘宝客系统

轩宇淘宝客是一款适用于淘宝客打折单品推广的程序,无论老手或新手都能短时间内赚取大量佣金的淘宝客网站程序,不同于现在广泛的淘宝客推广网站。本程序可手动添加商品,同时也配置强大的多功能采集插件,可采集评论,也可自定义采集规则,全自动无人值守采集更新网站,无需人工维护。默认提供精美的页面设计模版,超好的用户访问体验,超高转化率。对搜索引擎收录友好,整站伪静态技术,访问速度快,无需等待漫长的生成HTML页

轩宇淘宝客系统 0
查看详情 轩宇淘宝客系统

HTML:

复制代码 代码如下:


   

       
       

       

       

           

                 

    •                 13914157895
                      战士
                 

    •            

    •                 15112357896
                      牧师
                 

    •            

    •                 13732459980
                      盗贼
                 

    •            

    •                 18015942365
                      德鲁伊
                 

    •            

    •                 15312485698
                      武僧
                 

    •            

    •                 13815963258
                      死灵法师
                 

    •            

    •                 13815934258
                      圣骑士
                 

    •        

       


    CSS:

    复制代码 代码如下:

    * { padding: 0; margin: 0; }
    ol , ul { list-style: none; }
    body { font-size: 12px; color:#333; }
    .search-test-inner { margin: 100px auto; padding: 10px; width: 400px; background: #e0e0e0; border-radius: 10px; box-shadow: 1px 2px 6px #444; }
    .search-val-inner { margin-bottom: 20px; padding: 10px; background: #fff; }
    .member-list-inner .search-li { padding: 10px; }
    .search-value-list { margin-top: 10px; }
    .search-value-list li { padding: 5px; }
    .member-list-inner .search-li .phone,
    .search-value-list li .phone { float: right; }
    .search-value { width: 100%; height: 30px; line-height: 30px; }
    .tips { font-weight: bold; }

    JS:

    复制代码 代码如下:

    //---------------------------------------------------【初始化】
    function SEARCH_ENGINE(dom,searchInput,searchResultInner,searchList){
        //存储拼音+汉字+数字的数组
        this.searchMemberArray = [];
        //作用对象
        this.dom = $("." + dom);
        //搜索框
        this.searchInput = "." + searchInput;
        //搜索结果框
        this.searchResultInner = this.dom.find("." + searchResultInner);
        //搜索对象的名单列表
        this.searchList = this.dom.find("." + searchList);
        //转换成拼音并存入数组
        this.transformPinYin();
        //绑定搜索事件
        this.searchActiveEvent();
    }
    SEARCH_ENGINE.prototype = {
        //-----------------------------【转换成拼音,并将拼音、汉字、数字存入数组】
        transformPinYin : function(){
            //临时存放数据对象
            $("body").append('');
            var $pinyin = $("input.pingying-box");
            for(var i=0;i             //存放名字,转换成拼音
                $pinyin.val(this.searchList.eq(i).attr("data-name"));
                //汉字转换成拼音
                var pinyin = $pinyin.toPinyin().toLowerCase().replace(/s/g,"");
                //汉字
                var cnCharacter = this.searchList.eq(i).attr("data-name");
                //数字
                var digital = this.searchList.eq(i).attr("data-phone");
                //存入数组
                this.searchMemberArray.push(pinyin + "&" + cnCharacter + "&" + digital);
            }
            //删除临时存放数据对象
            $pinyin.remove();
        },
        //-----------------------------【模糊搜索关键字】
        fuzzySearch : function(type,val){
            var s;
            var returnArray = [];
            //拼音
            if(type === "pinyin"){
                s = 0;
            }
            //汉字
            else if(type === "cnCharacter"){
                s = 1;
            }
            //数字
            else if(type === "digital"){
                s = 2;
            }
            for(var i=0;i             //包含字符
                if(this.searchMemberArray[i].split("&")[s].indexOf(val) >= 0){
                    returnArray.push(this.searchMemberArray[i]);
                }
            }
            return returnArray;
        },
        //-----------------------------【输出搜索结果】
        postMemberList : function(tempArray){
            var html = '';
            //有搜索结果
            if(tempArray.length > 0){
                html += '
  • 搜索结果(' + tempArray.length + ')
  • ';
                for(var i=0;i                 var sArray = tempArray[i].split("&");
                    html += '
  • ';
                    html += '' + sArray[2] + '';
                    html += '' + sArray[1] + '';
                    html += '
  • ';
                }
            }
            //无搜索结果
            else{
                if($(this.searchInput).val() != ""){
                    html += '
  • 无搜索结果……
  • ';
                }else{
                    this.searchResultInner.html("");
                }
            }
            this.searchResultInner.html(html);
        },
        //-----------------------------【绑定搜索事件】
        searchActiveEvent : function(){
            var searchEngine = this;
            $(document).on("keyup",this.searchInput,function(){
                //临时存放找到的数组
                var tempArray = [];
                var val = $(this).val();
                //判断拼音的正则
                var pinYinRule = /^[A-Za-z]+$/;
                //判断汉字的正则
                var cnCharacterRule = new RegExp("^[\u4E00-\u9FFF]+$","g");
                //判断整数的正则
                var digitalRule = /^[-+]?d+(.d+)?$/;
                //只搜索3种情况
                //拼音
                if(pinYinRule.test(val)){
                    tempArray = searchEngine.fuzzySearch("pinyin",val);
                }
                //汉字
                else if(cnCharacterRule.test(val)){
                    tempArray = searchEngine.fuzzySearch("cnCharacter",val);
                }
                //数字
                else if(digitalRule.test(val)){
                    tempArray = searchEngine.fuzzySearch("digital",val);
                }
                else{
                    searchEngine.searchResultInner.html('
  • 无搜索结果……
  • ');
                }
                searchEngine.postMemberList(tempArray);
            });
        }
    };

    效果是不是非常棒呢,小伙伴们美化下就可以用到自己项目中了

    相关标签:
    java速学教程(入门到精通)
    java速学教程(入门到精通)

    java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载
    来源:php中文网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号