在 Optgroup JQUERY 中排序 Select 选项

Sort Select Option In Optgroup JQUERY

我有一个如下所示的 select,我想按字母顺序对这个 select 进行排序。 (Jquery)

<select>
  <optgroup label="Potatoes" >
    <option value="1" > Value 1 </option>
    <option value="3" > Value 3 </option>
    <option value="2" > Value 2 </option>
   </optgroup>

   <optgroup label="Banana" >
    <option value="1" > C </option>
    <option value="3" > A </option>
    <option value="2" > S </option>
   </optgroup>
 </select>

我只想对选项组中的选项进行排序。我不想对 optgroup 进行排序。

为了拥有:

<select>
  <optgroup label="Potatoes" >
    <option value="1" > Value 1 </option>
    <option value="2" > Value 2 </option>
    <option value="3" > Value 3 </option>
   </optgroup>

   <optgroup label="Banana" >
      <option value="3" > A </option>
      <option value="1" > C </option>
      <option value="2" > S </option>
   </optgroup>
 </select>

我只找到了一种使用 optgroups 对 select 进行排序的方法...

这可能是您要查找的内容:https://jsfiddle.net/dt3b6fmc/

$(function() {
  $('optgroup').each(function() {
    var optgroup = this;
    $( 'option', this ).sort(function(a,b) {
     return $(a).text() > $(b).text();
        }).appendTo(optgroup);
  });
});

是否满足您的需求?

您可以使用 localCompare 来比较您的选项 html 字符串

还使用函数将选择器结果作为数组使用 toArray()

.sort()的使用 请参阅下面的片段

$('select optgroup').each(function(index,elmt){
  result = $(elmt).find("option").toArray().sort((option1, option2) => option1.innerHTML.localeCompare(option2.innerHTML));
  
  $(result).appendTo(elmt);
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <optgroup label="Potatoes" >
    <option value="1" > Value 1 </option>
    <option value="3" > Value 3 </option>
    <option value="2" > Value 2 </option>
   </optgroup>

   <optgroup label="Banana" >
    <option value="1" > C </option>
    <option value="3" > A </option>
    <option value="2" > S </option>
   </optgroup>
 </select>