2015-04-23 2 views
2

У меня есть небольшой метод переключения js для сортировки некоторых элементов div по заголовку (a-z) и цене (low-high), но он сортируется правильно, например. 10 следует 100, затем на 11?Сортировочные элементы по цене, порядка 10, 100, 12, 13, 140?

вот код

sortPrice: function() { 

    switch ($('select[name=sortOrder]').val()) { 

     case('priceAsc'): 

      $('.adventureRow').sortElements(function(a, b) { 
       return $(a).attr('id') > $(b).attr('id') ? 1 : -1; 
      }); 

      break; 

     case('priceDesc'): 

      $('.adventureRow').sortElements(function(a, b) { 
       return $(a).attr('id') < $(b).attr('id') ? 1 : -1; 
      }); 

      break; 

     case('alphaAsc'): 

      $('.adventureRow').sortElements(function(a,b) { 
       return $(a).attr('title') > $(b).attr('title') ? 1 : -1; 
      }); 

      break; 

     case('alphaDesc'): 

      $('.adventureRow').sortElements(function(a,b) { 
       return $(a).attr('title') < $(b).attr('title') ? 1 : -1; 
      }); 

      break; 

     case('default'): 

      $('.adventureRow').sortElements(function(a,b) { 
       return $(a).attr('style') > $(b).attr('style') ? 1 : -1; 
      }); 


    } 

Я думаю, что я что-то делать с объявляя значения как числовой отсутствует, но я не уверен, что.

+0

Поскольку вы используете сравнение строк –

ответ

3

Проблема вы делаете сравнение строк для числовых значений ....

return +$(a).attr('id') < +$(b).attr('id') ? 1 : -1; 

Так строка 2 больше 100, потому что сравнение строк слева направо, и когда он соответствует 2 и 1 , 2 больше ... он не сравнивает числовое значение

+0

будет ли обертывание строки в parseInt() работать? например parseInt ($ (a) .attr ('id')) – maioman

+0

Да ... '+' является ярлыком для этого –

+0

+ отлично работает – Rich

Смежные вопросы