jQuery Isotope按编号排序错误地排序项目

时间:2012-12-08 00:30:30

标签: javascript jquery jquery-isotope

我在我的网站上设置了同位素订单和排序,但如果我将订单更改为编号,则会对错误的商品进行排序。

例如我有这样的项目:

<div class="boxm" data-name="aaa" data-number="11944"></div>
<div class="boxm" data-name="bbb" data-number="1494"></div>
<div class="boxm" data-name="ccc" data-number="1574"></div>
<div class="boxm" data-name="ddd" data-number="1892"></div>
<div class="boxm" data-name="eee" data-number="19520"></div>
<div class="boxm" data-name="fff" data-number="2090"></div>
<div class="boxm" data-name="fgf" data-number="9010"></div>

使用像这样的同位素代码:

$container.isotope({
        itemSelector : '.boxm',
        masonry : {
            columnWidth : 67,
            cornerStampSelector: '.corner-stamp'
        },
        getSortData : {
            name : function($elem){
                return $elem.attr('data-name');
            },
            number : function($elem){
                return $elem.attr('data-number');
            }
        }
    });
$sortLinks.click(function(){
        var $this = $(this);
        if($this.hasClass('selected')){
            return false;
        }
        var $isSet = $this.parents('.option-set');
        $isSet.find('.selected').removeClass('selected');
        $this.addClass('selected');

        var options = {},
            key = $isSet.attr('data-option-key'),
            value = $this.attr('data-option-value');
        value = value === 'false' ? false : value;
        options[key] = value;
        if(key === 'layoutMode' && typeof changeLayoutMode === 'function'){
            changeLayoutMode($this, options)
        }else {
            $container.isotope(options);
        }

        return false;

    });

如果按编号按顺序,它将按照我在此输入的顺序排序,如果我按DESC排序,则按照2090年开始的9010开始。如果我是对的,这是因为Isotope只监视前两个我应该正确地订购它。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

可能是因为data-number属性的值不被视为整数值而是字符串。试试这个:

number : function($elem){
            parseInt($elem.attr('data-number'), 10);
        }

存储在字符串中的数字以不总是逻辑的方式排序,即由于初始数字,199999小于2。

(感谢balexandre关于添加基础的评论)

答案 1 :(得分:0)

getSortData : {
            name : function($elem){
                return $elem.attr('data-name');
            },
            number : function($elem){
                return $elem.attr('data-number');
            }
        }

你在这里返回一个字符串

更改返回$elem.attr('data-number');以返回parseInt($elem.attr('data-number'));

这应该可以解决问题。

相关问题