javascript - 对选项值进行 ASC 排序

标签 javascript jquery

我不知道如何正确排序我的选择选项值。我的选择元素返回文本值,如下所示:

** Please choose
2-3 pers.
16-18 pers.
20-24 pers
3-4 pers.
4-6 pers.
5-7 pers
6-8 pers.
8-10 pers.
10-12 pers.
12-14 pers.
14-16 pers.
16-18 pers.

我知道 javascript 的排序如下:

""
1
10
11
2
3
4
5
6
7
8
9

但我想将其从“”排序到11(“”,1,2,3,4,5,6,7,8,9,10,11)。希望这里有一些专业知识。谢谢。

HTML:

<select class="form-control" id="dessertservingID" data-value="10" name="dessertservingID" required="">
<option value="">** Please choose</option>
<option value="7">10-12 pers.</option>
<option value="8">12-14 pers.</option>
<option value="9">14-16 pers.</option>
<option selected="" value="10">16-18 pers.</option>
<option value="1">2-3 pers.</option>
<option value="11">20-24 pers.</option>
<option value="2">3-4 pers.</option>
<option value="3">4-6 pers.</option>
<option value="4">5-7 pers.</option>
<option value="5">6-8 pers.</option>
<option value="6">8-10 pers.</option>
</select>

Javascript:

$(function() {
    var options = $('#dessertservingID option');
    options.sort(function(a, b) {
    if (a.value > b.value) {
        return 1;
    }
    else if (a.value < b.value) {
    return -1;
    }
    else {
    return 0;
    }
})

$("#dessertservingID").empty().append(options);

// Vive la France!

$('#dessertservingID option[value=""]').insertAfter($('#dessertservingID option:first'));

});

最佳答案

问题是因为您将 value 属性作为字符串进行比较。首先使用 parseInt() 将它们转换为整数。

另请注意,您可以通过简单地从一个值中减去另一个值来简化您的 sort() 逻辑:

$(function() {
  var $options = $('#dessertservingID option');
  $options.sort(function(a, b) {
    return parseInt(a.value, 10) - parseInt(b.value, 10);
  })

  $("#dessertservingID").empty().append($options);

  $('#dessertservingID option[value=""]').insertAfter($('#dessertservingID option:first'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="form-control" id="dessertservingID" data-value="10" name="dessertservingID" required="">
  <option value="">** Please choose</option>
  <option value="7">10-12 pers.</option>
  <option value="8">12-14 pers.</option>
  <option value="9">14-16 pers.</option>
  <option selected="" value="10">16-18 pers.</option>
  <option value="1">2-3 pers.</option>
  <option value="11">20-24 pers.</option>
  <option value="2">3-4 pers.</option>
  <option value="3">4-6 pers.</option>
  <option value="4">5-7 pers.</option>
  <option value="5">6-8 pers.</option>
  <option value="6">8-10 pers.</option>
</select>

关于javascript - 对选项值进行 ASC 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54479058/

相关文章:

javascript - Bootstrap Carousel Arrows 不改变幻灯片

php - Owl Carousel - Magento 产品

JavaScript Url Catcher 像 Twitter (Regexp)

javascript - puppeteer 调试 : finding which line is cuzing the error

javascript - 使下载链接在卸载前不触发

javascript - 如何使用 html5 而不是 adobe flash 来完成悬停效果的显示

javascript - 如何正确使用jquery数据表插件

javascript - 使用 '&&' 作为 if 语句的简写?

javascript - 从 Jquery Mobile 中的控件组中删除特定元素

jquery - 相当于空对象的 $.isEmptyObject({}) 的 typescript