我正在使用流沙来重新订购产品清单标题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;
});
}
答案 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;
});
}
可行吗