【问题标题】:jquery ui combobox results sortingjquery ui 组合框结果排序
【发布时间】:2013-02-05 01:28:47
【问题描述】:

我有一个 Jquery UI Combobox 自动完成小部件,我正在尝试编写一个 matcher 函数来对搜索结果进行排序。 我正在尝试获得首选结果:

当您键入例如。 lo 结果应该这样排序:

  • 伦敦伦敦
  • logna
  • 巴塞lona

当术语与第一个键入的字母匹配时,它位于第一位,当术语包含字母时,它出现在第一条规则之后。

我发现了类似的东西,但我无法让它工作。在此解决方案中,我找不到在 matcher 变量和 term 变量之间建立关系的方法。

原来的组合框

source: function( request, response ) {
              // match by first letters in search term
              var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex(request.term), "i" ); 
              response( select.children( "option" ).map(function() {
                var text = $( this ).text();
                if ( this.value && ( !request.term || matcher.test(text) ) )
                  return {
                    label: text.replace(
                      new RegExp(
                        "(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"
                      ), "<strong>$1</strong>" ),
                    value: text,
                    option: this
                  };
              }) );
            },

jquery ui 自动补全的解决方案

$(document).ready(function () {
    // my source is in html
    var source = ['Adam', 'Benjamin', 'Matt', 'Michael', 'Sam', 'Tim'];
    $("input").autocomplete({
        source: function (request, response) {
            var term = $.ui.autocomplete.escapeRegex(request.term)
                , startsWithMatcher = new RegExp("^" + term, "i")
                , startsWith = $.grep(source, function(value) {
                    return startsWithMatcher.test(value.label || value.value || value);
                })
                , containsMatcher = new RegExp(term, "i")
                , contains = $.grep(source, function (value) {
                    return $.inArray(value, startsWith) < 0 &&
                        containsMatcher.test(value.label || value.value || value);
                });

            response(startsWith.concat(contains));
        }
    });
});

Link to similar answer I found

JS FIDDLE

任何可能的反馈将不胜感激。

谢谢。

【问题讨论】:

    标签: jquery-ui combobox jquery-ui-autocomplete


    【解决方案1】:

    我可以通过添加以下内容来完成这项工作:

    source: function (request, response) {
                    var matcher = $.ui.autocomplete.escapeRegex(request.term),
                    startsWithMatcher = new RegExp("^" + matcher, "i"), 
                    startsWith = $.grep(select.children("option"), function(value) {
                            return startsWithMatcher.test(value.label || value.value || value);
                        }),
                        containsMatcher = new RegExp(matcher, "i"),
                        contains = $.grep(select.children("option"), function (value) {
                            return $.inArray(value, startsWith) < 0 &&
                                containsMatcher.test(value.label || value.value || value);
                        });
                    response(startsWith.concat(contains).map(function(option) {
                      var text = $(option).text();
                      var val = $(option).val();  
                      return {
                        label: text,
                        value: val,
                        option: $(option)
                      };
                    }));
                }
    

    我还需要从选择框中删除第一个空白选项,否则您会得到一个空结果。相反,我为组合框输入添加了一个占位符

    $('.ui-combobox-input').attr('placeholder','Search Here').val('');
    

    JS Fiddle

    【讨论】:

      猜你喜欢
      • 2013-12-12
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      相关资源
      最近更新 更多