最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 21:30:58
文档

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

基于javascript实现的搜索时自动提示功能_javascript技巧:当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享: 效果图: 功能描述: 按下键盘后及时搜索条目中的汉字,汉字对应的拼音和号码; 实现思路: 先将条目中的汉字
推荐度:
导读基于javascript实现的搜索时自动提示功能_javascript技巧:当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享: 效果图: 功能描述: 按下键盘后及时搜索条目中的汉字,汉字对应的拼音和号码; 实现思路: 先将条目中的汉字
当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享:

效果图:

功能描述:

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

实现思路:

先将条目中的汉字转换成拼音,然后将汉字,拼音,数字拼接成规律的字符串,放入数组,然后每次按下键盘后判断 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:

代码如下:








  • 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);
    });
    }
    };

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

    文档

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

    基于javascript实现的搜索时自动提示功能_javascript技巧:当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享: 效果图: 功能描述: 按下键盘后及时搜索条目中的汉字,汉字对应的拼音和号码; 实现思路: 先将条目中的汉字
    推荐度:
    标签: 功能 的时候 实现
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top