流沙分类价格从低到高/从高到低

时间:2013-09-09 15:02:57

标签: jquery sorting

我正在使用流沙来重新订购产品清单标题asc / desc和价格asc / desc

出于某种原因,它正在按照这个价格排序

10,1,2,3,4

或4,3,2,1,10

它似乎是在值的第一个数字上排序?

这是我的代码......

if ( sortLi.hasClass( 'priceAsc' ) ) {

$lis.children().sortElements(function(a, b){
return $(a).find('input[name=price]').val() > $(b).find('input[name=price]').val() ? 1 : -1;
});         

}

if ( sortLi.hasClass( 'priceDesc' ) ) {

$lis.children().sortElements(function(a, b){
return $(a).find('input[name=price]').val() < $(b).find('input[name=price]').val() ? 1 : -1;
});         

}

2 个答案:

答案 0 :(得分:1)

val()为您提供了一个字符串,因此><比较是词法(非数字)。尝试将值包装在parseInt()parseFloat()中。确保也添加适当的错误处理。

答案 1 :(得分:0)

这可能是按字典顺序比较字符串而不是整数。

在比较之前尝试将所有内容转换为数字。像这样:

if ( sortLi.hasClass( 'priceAsc' ) ) {

$lis.children().sortElements(function(a, b){
return Number ($(a).find('input[name=price]').val()) > Number ($(b).find('input[name=price]').val()) ? 1 : -1;
});         

}

if ( sortLi.hasClass( 'priceDesc' ) ) {

$lis.children().sortElements(function(a, b){
return Number ($(a).find('input[name=price]').val()) < Number ($(b).find('input[name=price]').val()) ? 1 : -1;
});         

}

可行吗