jquery 使用十进制值按值分组对div列表进行排序

rseugnpd  于 2023-10-17  发布在  jQuery
关注(0)|答案(1)|浏览(81)

在测试了许多解决方案后发现,没有一个是正确的排序。我需要对按分类字段分组的列表进行排序:

<div id="idx-list-ctn" class="list-ctn">
    <div class="header-ctn">
        <div>Fornecedores</div>
        <div><img id="lst-order-by-btn" src="/Images/distance-19x19.png">Ordenar</div>
    </div>
    <div id="lst-19324" class="partner-ctn" data-classification="2" data-distance="2">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
    <div id="lst-19325" class="partner-ctn" data-classification="1" data-distance="2">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
    <div id="lst-19326" class="partner-ctn" data-classification="1" data-distance="2,2">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
    <div id="lst-19327" class="partner-ctn" data-classification="2" data-distance="1,9">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
    <div id="lst-19328" class="partner-ctn" data-classification="1" data-distance="0,9">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
    <div id="lst-19329" class="partner-ctn" data-classification="2" data-distance="1,7">
        <div class="info-wrp lp-blc-rate-2">
            <div class="info">
            </div>
        </div>
    </div>
</div>

这是我到目前为止构建的函数:

$("#idx-list-ctn").find('.partner-ctn').sort(function (a, b) {

  var aa = $(a).data('classification');
  var bb = $(b).data('classification');
  if (aa === bb) {
    aa = $(a).data('distance').toString().replace(',', '.');
    bb = $(b).data('distance').toString().replace(',', '.');
    aa = parseFloat(aa);
    bb = parseFloat(bb);
  }
  return aa - bb;
}).appendTo("#idx-list-ctn");

预期结果是:升序:分类:1|距离:0,9-> 2 -> 2,2 »分类:2|距离:1,7-> 1,9-> 2
降序:分类:1|距离:2,2-> 2 -> 0,9 »分类:2|距离:2 -> 1,9-> 1,7
但我得到:上升:好
降序:分类:2|距离:2 -> 1,9-> 1,7 »分类:1|距离:2,2-> 2 -> 0,9
分类组2将位于列表的顶部,但应保留在分类1组之后。

chy5wohz

chy5wohz1#

如果我对问题的理解正确的话,这应该行得通。

$("#idx-list-ctn")
  .find('.partner-ctn')
  .sort(function (a, b) {
    var aa = $(a).data('classification');
    var bb = $(b).data('classification');
    if (aa === bb) {
      aa = $(a).data('distance');
      bb = $(b).data('distance');
      aa = parseFloat(aa.replace(',', '.'));
      bb = parseFloat(bb.replace(',', '.'));
    }
    return aa - bb;
  })
  .appendTo("#idx-list-ctn");

相关问题