微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Jquery自动完成匹配字符串中的多个无序单词

我试图显示输入的搜索词的最佳匹配.例如

现在Jquery没有给我预期的效果.当我输入:今天一个自动完成将显示任何内容,但如果我键入一天,它将显示以该顺序中的这两个单词开头的搜索结果.我想今天出现的一天是今天的第一天和最后一天.我希望搜索结果显示在其中包含这些单词的顺序并不重要.我在这里看了一下,却找不到这样的东西,这似乎是一种常见的搜索方法,我看不出为什么没有人问过这个问题.是否有一个内置的方法来处理这个?

<!doctype html>

<html lang="en">
<head>
  <Meta charset="utf-8" />
  <title>jQuery UI Autocomplete - Default functionality</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
  <link rel="stylesheet" href="/resources/demos/style.css" />
  <script>
  $(function() {
    var availableTags = [

          "one day is the first and last today","tuesday is today","one","one day is tomorrow"


    ];
    $( "#tags" ).autocomplete({
      source: availableTags,multiple: true,mustMatch: false
    });
  });
  </script>
</head>
<body>

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags" />
</div>


</body>
</html>

解决方法

尝试覆盖auto complete提供的认过滤器逻辑.
// Overrides the default autocomplete filter function to search for matched on atleast 1 word in each of the input term's words
$.ui.autocomplete.filter = function (array,terms) {
    arrayOfTerms = terms.split(" ");
    var term = $.map(arrayOfTerms,function (tm) {
         return $.ui.autocomplete.escapeRegex(tm);
    }).join('|');
   var matcher = new RegExp("\\b" + term,"i");
    return $.grep(array,function (value) {
       return matcher.test(value.label || value.value || value);
    });
};

Fiddle

或者创建自己的过滤器函数并处理搜索的返回,从而保持完整的过滤器功能.

function customFilter(array,function (value) {
       return matcher.test(value.label || value.value || value);
    });
};

$("#tags").autocomplete({
    source: availableTags,mustMatch: false,source: function (request,response) {
        response(customFilter(
        availableTags,request.term));
    },});

Fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐