Вероятно, это будет самый быстрый способ сделать это, поскольку он не использует jQuery:
function sortList(ul){
var new_ul = ul.cloneNode(false);
// Add all lis to an array
var lis = [];
for(var i = ul.childNodes.length; i--;){
if(ul.childNodes[i].nodeName === 'LI')
lis.push(ul.childNodes[i]);
}
// Sort the lis in descending order
lis.sort(function(a, b){
return parseInt(b.childNodes[0].data , 10) -
parseInt(a.childNodes[0].data , 10);
});
// Add them into the ul in order
for(var i = 0; i < lis.length; i++)
new_ul.appendChild(lis[i]);
ul.parentNode.replaceChild(new_ul, ul);
}
Вызовите функцию как:
sortList(document.getElementsByClassName('list')[0]);
Вы можете отсортировать другие списки таким же образом, и если у вас есть другие элементы на той же странице с классом списка, вы должны дать вашему ul идентификатор и передать его, используя вместо этого.
Пример JSFiddle
Редактировать
Поскольку вы упомянули, что хотите, чтобы это происходило на pageLoad, я предполагаю, что вы хотите, чтобы это произошло как можно скорее после того, как ul находится в DOM, что означает, что вы должны добавить функцию sortList
в заголовок вашей страницы и использовать это сразу после вашего списка, как это:
<head>
...
<script type="text/javascript">
function sortList(ul){
var new_ul = ul.cloneNode(false);
var lis = [];
for(var i = ul.childNodes.length; i--;){
if(ul.childNodes[i].nodeName === 'LI')
lis.push(ul.childNodes[i]);
}
lis.sort(function(a, b){
return parseInt(b.childNodes[0].data , 10) - parseInt(a.childNodes[0].data , 10);
});
for(var i = 0; i < lis.length; i++)
new_ul.appendChild(lis[i]);
ul.parentNode.replaceChild(new_ul, ul);
}
</script>
</head>
<body>
...
<ul class="list">
<li id="alpha">32</li>
<li id="beta">170</li>
<li id="delta">28</li>
</ul>
<script type="text/javascript">
!function(){
var uls = document.getElementsByTagName('ul');
sortList( uls[uls.length - 1] );
}();
</script>
...
</body>