jQuery 和 Isotope 按元素内的数字排序

标签 jquery sorting jquery-isotope

我在尝试弄清楚如何进行特定类型的排序时遇到了麻烦,通常我会按类 ID 进行排序,但这次我试图实现不同的目标。

好的,这是示例代码:

<div class="points-wrapper">

<span class="rewards-points">
        <span data-bind="text: $data.Points">1000</span> Points
</span>

<span class="rewards-points">
        <span data-bind="text: $data.Points">5000</span> Points
</span>

<span class="rewards-points">
        <span data-bind="text: $data.Points">5000</span> Points
</span>

</div>

下面的排序按钮。

<div id="sorts" class="button-group">
  <button class="button is-checked" data-sort-value="original-order">original order</button>
  <button class="button" data-sort-value="points">500</button>
  <button class="button" data-sort-value="points">1000</button>
  <button class="button" data-sort-value="points">2000</button>
  <button class="button" data-sort-value="points">3000</button>
  <button class="button" data-sort-value="points">5000</button>
</div>  

这是我实际正在研究的一个较小的示例,真实的示例有大约 30 个不同的项目,所有项目都有不同的点数。

我试图弄清楚如何根据跨度内的点数进行排序。选项类似于“0 - 1000”、“1000 - 5000”、“5000 - “10000”等。

如何使用 jQuery 和 Isotope.js 对其进行排序?

最佳答案

* 排序 *

所以我假设 rewards-points 类是您的同位素项目,因此:

var container = $('#container').isotope({
itemSelector: '.rewards-points',  
  layoutMode: 'masonry',
    getSortData: {
        points: function(item){
            return parseFloat($(item).find(".number").text());
        }
    }
});

container.isotope({ sortBy: 'points' });

getSortData 函数返回 Isotope 排序依据的值,然后将 sortBy 设置为我们在 getSortData 函数中设置的名称.

详细信息请参见:http://isotope.metafizzy.co/sorting.html

* 通过过滤进行排序 *

您需要使用过滤功能,如下所示:

$(".button").click(function(e) {
    if($(this).text() == "All"){
        container.isotope({ filter: function() { return true; } });
    }
    else
    {
        var btnVal = parseFloat($(this).text());
        container.isotope({ filter: function() {
            var itemVal = parseFloat($(this).find(".number").text());
            return btnVal == itemVal;
        }});
    }

});

参见:http://isotope.metafizzy.co/filtering.html

我认为应该对其进行排序...但我想说,如果您可以更改标记,请使用 data 属性来保存值,并使用类来保存选择器,这样它就可以工作使用同位素更容易!

在这里更新 fiddle :http://jsfiddle.net/Y59S2/3/

同样,整理 HTML 会让事情变得更加容易,所以需要考虑一些事情。

关于jQuery 和 Isotope 按元素内的数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437156/

相关文章:

javascript - 循环遍历 jQuery Then When 的 Ajax 请求的两种方法 - 使用哪个?

javascript - 第二个弹出窗口表示 Highchart 不适用于传单 geojson 多边形

javascript - 是否可以通过jquery禁用或隐藏文件下载对话框中的文件 "save"选项?

javascript - 切换类会使事件函数无效吗?

php - 在 PHP 中,为什么字符串 "1874S-O.jpg"不大于 "1874S.jpg"?

ruby-on-rails - ruby 重新排序日期数组,字符串部分保留空字符串

javascript - 如何在 React 应用程序(CRA)中从 jQuery 加载 $ 函数?

java - 如何对二维 ArrayList 进行排序

jquery - 使用同位素过滤和 InfiniteScroll 加载重复页面/内容

javascript - 组合 jQuery 同位素过滤器