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()文字列を与えるので>、 と の<比較は辞書順です (数値ではありません)。parseInt()またはで値をラップしてみてくださいparseFloat()。適切なエラー処理も追加してください。

于 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 に答える