搜索框自动补全(模糊匹配)功能实现

javaScript 专栏收录该内容
16 篇文章 0 订阅

本地实现了一个搜索框自动补全的小功能,在JQuery UI的autocomplete插件的基础上,加入了自己的业务代码,贴出来回顾一下,同时可以给大家一个参考

首先贴出的是JQuery Ui 的自动补全插件部分的代码,后面的功能都是在其基础上追加的,直接拷贝到你的本地就可以直观的看到运行效果,也可以到官网上面体验和查看,为了方便,我这里是直接引入的JS链接;

jQueryUI 链接:https://jqueryui.com/download/

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery UI Autocomplete - Default functionality</title>
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  <script>
  $( function() {
    var availableTags = [//这里要改成根据用户的输入,自动更换词库的形式
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",
      "Groovy",
      "Haskell",
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",
      "Scala",
      "Scheme"
    ];
    $( "#tags" ).autocomplete({//调用补全功能
      source: availableTags
    });
  } );
  </script>
</head>
<body>
 
<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>
 
 
</body>
</html>

下面说下我追加的部分功能及实现思路,

1、首先,数据源要根据用户输入的内容实时更新.
输入框的值随着用户的输入会一直变动.所以,输入框下方的推荐补全的内容要输入的值进行变动,这里使用onkeyup属性来监听键盘动作,并传递此时input的value值到js函数中.

    //html
    <input type="search" class="" id="tags" placeholder="搜索" required="" onkeyup="catch_keyword(this.value)">

    //js代码
    function catch_keyword(word) {//这里接受并log出value
        console.log(word);
    }

2.发现当字符串中含有空格的时候,上面的字符串判断函数,返回的内容不符合预期,然后加入了一个去除字符串中所有空格的功能

    //去掉字符串中任意位置的空格,返回去除空格后的字符串
    function Trim(str, is_global) {
        var result;
        result = str.replace(/(^\s+)|(\s+$)/g, "");
        if (is_global.toLowerCase() == "g") {
            result = result.replace(/\s/g, "");
        }
        return result;
    }

   

    //字符串判断函数
    //判断一个字符串是否混有字母,全中文返回true
    function isChn(str) {
        var reg = /^[\u4E00-\u9FA5]+$/;
        if (!reg.test(str)) {
            return false;
        } else {
            return true;
        }
    }

 3、

处理结束用户的输入后,就是提交到后台,然后返回数据源了,也就是availableTags;这里我把availableTags声明为全局变量.并且用同步的Ajax方式取回数据,然后赋值给availableTags,然后在监听键盘的函数中,使用返回的数据调用自动补全功能

    //请求后端获取数据源
    function get_source(word = null) {
        var url = "";
        $.get({
            type: 'GET',
            url: url,
            async: false,//改为同步
            dataType: 'json',
            success: function (response) {
                console.log('1');
                availableTags = response;
            }
        });
    }

 4、这里更新下最开始的接收监听键盘后的value值的函数

    //捕捉键入的关键字
    function catch_keyword(word = null) {
        if (isChn(Trim(word, 'g'))) {//去掉空格后检查字符串,如果符合,继续请求后台
            get_source(word);
            $("#tags").autocomplete({
                source: availableTags //数据源
            });
        }
    }

5、附:完整代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <link rel="stylesheet" href="/jquery-weui-build/dist/lib/weui.min.css">
    <link rel="stylesheet" href="/jquery-weui-build/dist/css/jquery-weui.css">
    <link rel="stylesheet" href="/jquery-weui-build/demos/css/demos.css">
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="/static/jquery-weui-build/dist/lib/fastclick.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>


    <script>
        $(function () {
            FastClick.attach(document.body);
        });
    </script>
    <script src="/jquery-weui-build/dist/js/jquery-weui.js"></script>
</head>
<body>

<div class="ui-widget">


    <div class="weui-search-bar" id="searchBar">
        <form class="weui-search-bar__form" action="#">
            <div class="weui-search-bar__box">
                <i class="weui-icon-search"></i>
                <input type="search" class="weui-search-bar__input" id="tags" placeholder="搜索" required=""
                       onkeyup="catch_keyword(this.value)">
                <a href="javascript:" class="weui-icon-clear" id="searchClear"></a>
            </div>
            <label class="weui-search-bar__label" id="searchText"
                   style="transform-origin: 0px 0px 0px; opacity: 1; transform: scale(1, 1);">
                <i class="weui-icon-search"></i>
                <span>搜索</span>
            </label>
        </form>
        <a href="javascript:" class="weui-search-bar__cancel-btn" id="searchCancel">取消</a>
    </div>
</div>

<script>
    var availableTags = [];//数据源

    //先初始化自动补全功能
    $("#tags").autocomplete({
        source: availableTags //数据源
    });

    //去掉字符串中任意位置的空格
    function Trim(str, is_global) {
        var result;
        result = str.replace(/(^\s+)|(\s+$)/g, "");
        if (is_global.toLowerCase() == "g") {
            result = result.replace(/\s/g, "");
        }
        return result;
    }

    //判断字符串是否全是中文
    function isChn(str) {
        var reg = /^[\u4E00-\u9FA5]+$/;
        if (!reg.test(str)) {
            return false;
        } else {
            return true;
        }
    }

    //捕捉键入的关键字
    function catch_keyword(word = null) {

        if (isChn(Trim(word, 'g'))) {
            get_source(word);
            $("#tags").autocomplete({
                source: availableTags //数据源
            });

        }
    }

    //请求后端获取数据源
    function get_source(word = null) {
        var url = "<?php echo base_url('admin/Demo/source');?>?keyword=" + word;
        $.get({
            type: 'GET',
            url: url,
            async: false,//改为同步
            dataType: 'json',
            success: function (response) {
                console.log('1');
                availableTags = response;
            }
        });
    }

</script>
</body>
</html>

 

  • 1
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值