按数据属性排序

Sorting after data-attribute

我正在处理包含自定义数据属性的 div 列表,我想根据选择对这些属性进行排序。例如,如果选择 'followers',它将排在 .box 的数据跟随者之后。

我的 jsfiddle:https://jsfiddle.net/nbgo117b/

我在想这样的事情,但我做不到。

 $("#sorter").change(function() {
    var value = $("#sorter option:selected").val();
    var boxOrdered;

    if (value == 'date' ){
        boxOrdered = $('.influencer .box').sort(function(a, b){
        return ($(b).data('followers')) < ($(a).data('followers')) ? 1 : -1;
    });
  }
$(".influencer").html(boxOrdered);
});

你可以使用$.sort来比较数据属性,就像这样:

$(document).ready(function() {
      var $influencer = $('.influencer');
       $("#sorter").on('change',function() {
         var criterion = $(this).val();
         $influencer.find('.box').sort(function (a, b) {
           var valA = $(a).find('[data-'+criterion+']').data(criterion);
           var valB = $(b).find('[data-'+criterion+']').data(criterion);
           return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;
         }).appendTo($influencer);
       });
     });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<selection id="sort">
<select id="sorter">
<option value="default">Sort by</option>
<option value="followers">Most followers</option>
<option value="likes">Most likes</option>
<option value="views">Most views</option>
<option value="date">Newsest</option>
<option value="alpha">Alphabetical order</option>
</select>
</selection>   

 <div class="influencer">
    <div class="box" data-added="20.20.2018">
      <span class="followers" data-followers="1500000">1.5M followers</span>
      <span class="likes" data-likes="200000">200K likes</span>
      <span class="views" data-views="100000">100K video views</span>
    </div>
    <div class="box" data-added="20.20.2018">
      <span class="followers" data-followers="2500000">2.5M followers</span>
      <span class="likes" data-likes="80000">80K likes</span>
      <span class="views" data-views="200000">200K video views</span>
    </div>
</div>