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

我在我的网站上设置了同位素订单和排序,但是如果我将订单更改为数字,则会将项目排序错误。

例如,我有这样的项目:

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

 $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只监视前两个字符但是我需要正确订购。

我怎么解决这个问题?

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

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

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

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

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

这应该可以解决问题。