0

我有一个显示大量列表的网格设置。在这些列表中是“高级”类别。即 - 食品清单 1、住宿清单 1、食品清单 2、优质食品清单。

基本上,目前它们是按照它们在 HTML 中设置的顺序加载的。但是我想在选择“全部”时首先列出“高级”列表,然后在选择“食物”类别时首先列出。

有人可以帮帮我吗?在这里小提琴 - https://jsfiddle.net/r1yd01fq/2/

$('#Container').mixItUp();
4

2 回答 2

0

这应该可以解决“全部”选项

$(document).on("click", ".filter", function() {
  var choice = $(this).data("filter");
  switch (choice) {
    case "all":
      $("#Container div").attr("data-sort", 0);
      $("#Container div.premium").attr("data-sort", 1);
      break;
  }
  var d = $("#Container div");
  d.sort(function(a, b){
    return $(b).data("sort")-$(a).data("sort")
  });
  $("#Container").html(d);
});
于 2016-05-04T17:36:44.327 回答
0

找到了一个相对简单的方法。最终使用 .insertAfter 位于容器顶部的高级 div 支架。然后,我使用了一个随机播放插件来随机化高级列表,因此首先加载的列表不会一直显示。

https://jsfiddle.net/r1yd01fq/4/

$.fn.shuffle = function() {

    var allElems = this.get(),
        getRandom = function(max) {
            return Math.floor(Math.random() * max);
        },
        shuffled = $.map(allElems, function(){
            var random = getRandom(allElems.length),
                randEl = $(allElems[random]).clone(true)[0];
            allElems.splice(random, 1);
            return randEl;
       });

    this.each(function(i){
        $(this).replaceWith($(shuffled[i]));
    });

    return $(shuffled);

};

// Insert all premium listings first
$(".premium").insertAfter(".prem");

// Shuffle premium listing so they appear randomly
$('.premium').shuffle();

// Instantiate MixItUp:
$('#Container').mixItUp({});
于 2016-05-05T10:20:39.477 回答