【问题标题】:How can i sort select2 results by specific character?如何按特定字符对 select2 结果进行排序?
【发布时间】:2018-03-01 12:21:02
【问题描述】:

我想按第一个字符在选项下方排序。 例如如果我搜索“香蕉”,那么所有 4 个选项都将使用 select2 进行搜索,但我首先想要“Sbanana1”。

那么有什么选项可以让我按“S”(特定)字符对 select2 结果进行排序, 所以从 's' 开始的选项会首先显示。

<button type=button>Sort Options</button>
<select class='whatever'>
<option value='Banana'>Banana1</option>
    <option value='Hello'>Banana2</option>        
    <option value='Sugar Cane'>SBanana1</option>
    <option value='Palm Oil'>SBanana2</option>
</select>

【问题讨论】:

  • 使用自定义匹配器select2.org/searching
  • 我尝试过,但找不到解决方案。
  • 您使用的是哪个版本的 select 2
  • select2 4.0版

标签: javascript jquery jquery-select2 jquery-select2-4


【解决方案1】:

使用 Select2 选项 API v4.0 - 排序

$('.whatever').select2({
  sorter: function(data) {
    /* Sort data using lowercase comparison */

    return data.sort(function(a, b) {
      a = a.text.toLowerCase();
      b = b.text.toLowerCase();
      
      if (a[0] == 's' && b[0] == 's') {
        return compare(a, b)
      } else if (a[0] == 's') {
        return -1;
      } else if (b[0] == 's') {
        return 1;
      } else {
        return compare(a, b)
      }
    });
  }
});

function compare(a, b) {
  if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  }
  return 0;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.css" integrity="sha256-xqxV4FDj5tslOz6MV13pdnXgf63lJwViadn//ciKmIs=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js" integrity="sha256-FA14tBI8v+/1BtcH9XtJpcNbComBEpdawUZA6BPXRVw=" crossorigin="anonymous"></script>

<select class="whatever">
    <option value="Banana">Banana1</option>
    <option value="Hello">Banana2</option>
    <option value="Sugar Cane">SBanana1</option>
    <option value="Palm Oil">SBanana2</option>
</select>

使用 Select2 选项 API v3.x - sortResults

$('.whatever').select2({
  sortResults: function(data) {
    /* Sort data using lowercase comparison */

    return data.sort(function(a, b) {
      a = a.text.toLowerCase();
      b = b.text.toLowerCase();
      
      if (a[0] == 's' && b[0] == 's') {
        return compare(a, b)
      } else if (a[0] == 's') {
        return -1;
      } else if (b[0] == 's') {
        return 1;
      } else {
        return compare(a, b)
      }
    });
  }
});

function compare(a, b) {
  if (a > b) {
    return 1;
  } else if (a < b) {
    return -1;
  }
  return 0;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.4/select2.min.css" integrity="sha256-ijlUKKj3hJCiiT2HWo1kqkI79NTEYpzOsw5Rs3k42dI=" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.4/select2.min.js" integrity="sha256-7A2MDY2eGSSUvgfbuH1IdzYk8qkEd3uzwiXADqPDdtY=" crossorigin="anonymous"></script>

<select class="whatever">
      <option value="Banana">Banana1</option>
      <option value="Hello">Banana2</option>
      <option value="Sugar Cane">SBanana1</option>
      <option value="Palm Oil">SBanana2</option>
</select>

【讨论】:

  • 当我使用它时,当有更多选项时,它无法滚动到顶部。我该怎么做?
  • 在fiddle中重现问题并分享
  • 例如。我有 10 个选项 s1 到 s10,现在如果我先选择 s10,然后如果我再次选择 s1 那么它不关注第一个选项,我的意思是不滚动到顶部
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多