2012-06-26 2 views
0

Следующий код заказывает список следующим образом: 1. item, 10. item, 100. item ... Что я могу добавить или изменить, чтобы заказать список численно (1,2,3 ...) ?Список нумерованных номеров

function sortUnorderedList(ul, sortDescending) { 
     if(typeof ul == "string") 
     ul = document.getElementById(ul); 

     var lis = ul.getElementsByTagName("LI"); 
     var vals = []; 

     for(var i = 0, l = lis.length; i < l; i++) 
     vals.push(lis[i].innerHTML); 

     vals.sort(); 

     if(sortDescending) 
     vals.reverse(); 

     for(var i = 0, l = lis.length; i < l; i++) 
     lis[i].innerHTML = vals[i]; 
    } 

    window.onload = function() { 
     var desc = false; 
     document.getElementById("test").onclick = function() { 
     sortUnorderedList("lister", desc); 
     sortUnorderedList("bin", desc); 
     desc = !desc; 
     return false; 
     } 
    } 

ответ

0

Элементы вашего набора хранятся в виде строк, поэтому они упорядочены по алфавиту. Я считаю, что ваш вид должен работать как ожидалось, если вы добавите свои элементы в виде целых чисел, используя функцию parseInt.

0

Вам просто нужно изменить:

vals.push(lis[i].innerHTML); 

To:

vals.push(+lis[i].innerHTML); 

Это будет конвертировать String в ряд и сделать работу заказа, как вы хотите.

0

Вместо

vals.sort() 

вы должны сделать:

vals.sort(function(a,b){return a-b}); 

что будет делать вид "для чисел".

0

На самом деле это хорошая практика для сортировки строк, таких как строки и ints, как ints.

Поэтому я предлагаю вам написать различные функции сортировки для типов данных, которые могут присутствовать в вашем проекте, и с регулярным выражением определить, какую функцию использовать.

Также есть большой плагин jQuery, который может быть легко расширен: http://tablesorter.com/docs/

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