1

我使用以下源标签实现了我喜欢的功能:

source: function (request, response) {
                 // delegate back to autocomplete, but extract the last term
                 response($.ui.autocomplete.filter(availableTags, extractLast(request.term)));
             },

我通过使用以下源标签实现了新功能:

source: function (request, response) {
                // Using a custom source callback to match only the beginning of terms
                var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
                response($.grep(availableTags, function (item) {
                    return matcher.test(item);
                }));
            }

我怎样才能结合这两个源标签,以便我可以同时拥有两者的功能?

4

1 回答 1

1

我认为您正在寻找这样的东西(只需将结果传递extractLast到正则表达式而不是整个术语):

source: function (request, response) {
    var term = extractLast(request.term),
        matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");

    response($.grep(availableTags, function (item) {
        return matcher.test(item);
    }));
}

示例:http: //jsfiddle.net/Aa5nK/6/

两者都在做什么:

  • 第一个是根据用户键入的最后一项过滤自动完成术语(由 a 描绘,
  • 第二个是根据用户键入的术语创建一个正则表达式。意思是“从^”开始,然后是从术语中删除任何特殊字符的实用函数,最后i是使正则表达式不区分大小写的参数。
  • 将它们组合起来只需提取最后一个术语(使用extractLast,然后基于该术语创建一个正则表达式。
于 2013-03-02T22:00:09.600 回答