按字母顺序排序,然后按特定前缀排序

时间:2018-02-05 14:11:18

标签: javascript jquery

我需要按字母顺序排序下拉列表,然后按前缀排序。

我要排序的前缀是“b:”,所以任何以“b:”开头的内容都应该在底部。

<select id="dropdown">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
  <option value="4">b: option 1</option>
  <option value="5">b: option 2</option>  
  <option value="6">c</option>
</select>

这是期望的最终结果:

<select id="dropdown">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
  <option value="6">c</option>
  <option value="4">b: option 1</option>
  <option value="5">b: option 2</option>  
</select>

我使用此JavaScript代码进行字母排序:

  $("#dropdown option").sort(function(a,b) { 
    var at = $(a).text();
    var bt = $(b).text();         
    return (at > bt)?1:((at < bt)?-1:0);        
  }).appendTo("#dropdown");

输出:

<select id="dropdown">
    <option value="1">a</option>
    <option value="2">b</option>
    <option value="4">b: option 1</option>
    <option value="5">b: option 2</option>
    <option value="3">c</option>
    <option value="6">c</option>
</select>

但是我仍然需要将“b:”元素推到下拉列表的底部。我怎样才能做到这一点?

以下是jsfiddle链接

1 个答案:

答案 0 :(得分:3)

您可以使用String#includes添加另一项检查作为前缀,并获取支票的差值。

at.startsWith(prefix) - bt.startsWith(prefix)

&#13;
&#13;
var prefix = 'b:'
$("#dropdown option").sort(function(a, b) {
  var at = $(a).text();
  var bt = $(b).text();
  return at.startsWith(prefix) - bt.startsWith(prefix) || at > bt || -(at < bt);
}).appendTo("#dropdown");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="dropdown">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
  <option value="4">b: option 1</option>
  <option value="5">b: option 2</option>  
  <option value="6">c</option>
</select>
&#13;
&#13;
&#13;

对于旧版用户代理,您可以使用String#indexOf

&#13;
&#13;
var prefix = 'b:'
$("#dropdown option").sort(function(a, b) {
  var at = $(a).text();
  var bt = $(b).text();
  return !at.indexOf(prefix) - !bt.indexOf(prefix) || at > bt || -(at < bt);
}).appendTo("#dropdown");
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="dropdown">
  <option value="1">a</option>
  <option value="2">b</option>
  <option value="3">c</option>
  <option value="4">b: option 1</option>
  <option value="5">b: option 2</option>  
  <option value="6">c</option>
</select>
&#13;
&#13;
&#13;