1

サイトでアイソトープの順序と並べ替えを設定しましたが、並べ替えを番号に変更すると、アイテムが正しく並べ替えられません。

たとえば、次のようなアイテムがあります。

<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 でソートを押すと、9010 で始まり、2090 が続きます。私が正しければ、Isotope は最初の 2 文字だけを監視するためですが、私は正しく注文する必要があります。

どうすればこの問題を解決できますか?

4

2 に答える 2

3

これはおそらく、data-number 属性の値が整数値ではなく文字列と見なされているためです。これを試して:

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

文字列に格納された数値は、常に論理的な方法でソートされるとは限りません。つまり、199999 は最初の数字が原因で 2 未満になります。

(ベースの追加についてコメントしてくれた balexandre に感謝)

于 2012-12-08T00:36:32.593 に答える
1
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'));

これで問題は解決するはずです。

于 2012-12-08T00:36:32.713 に答える