2012-12-08 60 views
0

我在我的網站上設置了同位素順序和排序,但如果我將排序更改爲數字,則排序項目錯誤。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排序,它將以9090在2090年之前開始。如果我是正確的,這是因爲同位素只看到前兩個字符,但我需要正確命令它。

我該如何解決這個問題?

回答

2

這可能是因爲數據編號屬性的值不被視爲整數值而是字符串。試試這個:存儲在串

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

號在並不總是邏輯方式進行排序,即199999小於2,因爲最初的數字的。

(感謝balexandre有關將基地評論)

+0

謝謝,現在看起來好多了:)但它仍然會出現如下錯誤:1990年後到來1330年和2000年以及1600年等,但幾乎不錯:D也許是因爲磚石和不同大小的元素,不要知道 –

+0

是的,也許。你可以在代碼視圖中看到HTML元素的實際順序嗎?也許浮動元素似乎無序,而他們實際上不在代碼中? – jtheman

+0

最初的PHP從數據庫加載按名稱ASC命令的元素,所以HTML代碼按名稱排序,並在同位素容器中,我只有我想要排序的元素。 –

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'));

這應該解決的問題。