0

我正在使用流沙重新订购产品列表标题 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;
});         

}
4

2 回答 2

1

val() gives you a string, so > and < comparisons are lexographical (not numeric). Try wrapping the values in parseInt() or parseFloat(). Make sure to add appropriate error handling as well.

于 2013-09-09T15:08:01.850 回答
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;
});         

}

可以工作

于 2013-09-09T15:09:28.843 回答