在数据属性

时间:2018-01-31 12:50:59

标签: javascript jquery html5 custom-data-attribute

我正在处理包含自定义数据属性的div列表,我希望使用选择进行排序。如果选择“关注者”,则会在.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);
});

1 个答案:

答案 0 :(得分:1)

您可以使用$.sort来比较数据属性,如下所示:

&#13;
&#13;
$(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);
       });
     });
&#13;
<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>
&#13;
&#13;
&#13;