如何使select2搜索开始按字母顺序排列?

时间:2015-09-12 17:55:29

标签: javascript jquery jquery-select2

我在我的文章跟踪应用程序中使用select2进行标记搜索,我注意到当你开始输入时,说“m”,“mi”,你会认为“迁移”首先会突出显示,但它会从任何东西开始有'm',就像形式一样。如图所示,“表单”首先出现,搜索得越多就会变得非常烦人。

如果你输入“mi”,我希望首先出现以“mi”开头的任何内容,而不是包含m和i的“form-middle”之类的东西。如何根据拼写正确制作select2查找标签?谢谢

答案是由于某种原因不起作用,也不是doc中提供的默认答案:

<select  style="width:90%;" multiple="multiple" id="selected_tags" name="selected_tags">
      {% for tag in tags %}        
          <option value="{{tag.slug}}">{{tag.name}}</option>
      {% endfor %}
  </select>  

....


$(document).ready(function() {
    $("#selected_tags").select2({
        sortResults: function(results, container, query) {
            if (query.term) {
                // use the built in javascript sort function
                return results.sort(function(a, b) {
                    if (a.text.length > b.text.length) {
                        return 1;
                    } else if (a.text.length < b.text.length) {
                        return -1;
                    } else {
                        return 0;
                    }
                });
            }
            return results;
        }
    });
});

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以对结果进行排序,请查看 documentation here 。根据查询的字符串索引排序。您可以使用 sort() 方法中的javascript构建对结果数组进行排序。

&#13;
&#13;
printf "%\n" "${array[@]}"
&#13;
$("#e1").select2({
  sortResults: function(results, container, query) {
    console.log(query);
    if (query.term) {
      // use the built in javascript sort function
      return results.sort(function(a, b) {
        console.log(a.text.indexOf(query),b.text.indexOf(query));
        if (a.text.indexOf(query.term) > b.text.indexOf(query.term)) {
          return 1;
        } else if (a.text.indexOf(query.term) < b.text.indexOf(query.term)) {
          return -1;
        } else {
          return 0;
        }
      });
    }
    return results;
  }
});
&#13;
&#13;
&#13;