javascript - 按自定义顺序对输入值进行排序

标签 javascript jquery sorting

我有多个具有不同值的单选按钮。我想根据 valueid 按以下顺序对这些按钮进行排序:

  1. 联邦 express 地面
  2. UPS 地面
  3. 自定义 1
  4. 自定义 2

由于所有选项的类和名称都相同,因此值和 ID 不同。我尝试过使用 JavaScript,但除了使用升序、降序和随机排序之外,我无法弄清楚如何按值按自定义顺序对选项进行排序。

<ul id="shipping_method">
 <li>
  <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_1" value="booster_custom_shipping_1" class="shipping_method" checked="checked">
  <label for="shipping_method_custom_shipping_1">Custom 1:</label>
 </li>
 <li>
  <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_2" value="booster_custom_shipping_2" class="shipping_method">
  <label for="shipping_method_custom_shipping_2">Custom 2:</label>
 </li>
 <li>
  <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_3" value="FedEx - FedEx Ground" class="shipping_method">
  <label for="shipping_method_fedex_ground">FedEx Ground:</label>
 </li>
 <li>
   <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_4" value="UPS - UPS Ground" class="shipping_method">
   <label for="shipping_method_ups-ground">UPS Ground:</label>
 </li>
</ul>

最佳答案

创建一个排序对象,查找其中的值,并根据该值进行排序:

var ordering = {
  "FedEx - FedEx Ground":      1,
  "UPS - UPS Ground":          2,
  "booster_custom_shipping_1": 3,
  "booster_custom_shipping_2": 4
};

$('#shipping_method > li').
  sort(
    function(a, b) {
      // for each <li>, get the value of the <input> it contains
      // look up that value in `ordering`, and use that for comparison
      //
      return ordering[ $('input', a).val() ] - ordering[ $('input', b).val() ];
    }
  ).
  each(
    // appending each element in sorted order leaves a sorted list behind
    //
    function() {
      $('#shipping_method').append(this);
    }
  );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul id="shipping_method">
  <li>
    <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_1" value="booster_custom_shipping_1" class="shipping_method" checked="checked">
    <label for="shipping_method_custom_shipping_1">Custom 1:</label>
  </li>
  <li>
    <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_2" value="booster_custom_shipping_2" class="shipping_method">
    <label for="shipping_method_custom_shipping_2">Custom 2:</label>
  </li>
  <li>
    <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_3" value="FedEx - FedEx Ground" class="shipping_method">
    <label for="shipping_method_fedex_ground">FedEx Ground:</label>
  </li>
  <li>
    <input type="radio" name="shipping_method[0]" data-index="0" id="shipping_4" value="UPS - UPS Ground" class="shipping_method">
    <label for="shipping_method_ups-ground">UPS Ground:</label>
  </li>
</ul>

关于javascript - 按自定义顺序对输入值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44270313/

相关文章:

javascript - 我怎样才能知道使用 java 脚本的 pdf 的尺寸,并拍摄它的快照以显示在网页上?

javascript复制多个对象并按顺序递增索引

python - 在python中将两个数组合并成一个矩阵并排序

java - 小数据的选择排序与快速排序

java - 如何纠正我的选择和插入排序算法

javascript - 无法使用 DOM 节点的属性作为 XPath/CSS 选择器查询的过滤器

javascript - AngularJS $http.post(...).success 不是具有文件上传方法的函数

javascript - JQuery 中的自动检查单选按钮(根据另一个值将单选按钮标记为选中/未选中)

jquery - ajax div 重新加载后 datepicker 不会启动

javascript - jQuery 从事件中获取标签