Сортировка элементов списка тупым способом
Есть маркированный список. Требуется его отсортировать по алфавиту по клику. Пытаюсь делать это вот так:
<html>
<head>
<title>О лосях</title>
<script>
function go() {
var ul = document.getElementsByTagName('ul')[0];
var odin=ul.firstChild;
var sort=true;
while (sort==true) do
{sort=false;
for (var elem=odin;elem!=null;elem=elem.nextSubling)
{sledElem=elem.nextSubling;
if (sledElem!=null)
{var buf1=sledElem.data.slice(1,11);
var buf2=elem.data.slice(1,11);
if (buf2.localeCompare(buf1)=true)
{var pervElem=ul.removeChild(sledElem);
elem.insertBefore(pervElem);
sort=true;}
}
}
}
}
window.onload = function() { document.body.onclick = go }
</script>
</head>
<body>
Правда о лосях.
<ul>
<li>
Лось - животное хитрое
</li>
<li>
яяяяя
</li>
<li>
И коварное
</li>
</ul>
</body>
</html>
Не работает. В чём ошибка? Я, может, и сам дошёл бы, но это моя первая прога на JavaScript, а компилятора, который мог бы ткнуть меня носом в ошибку, нету... На алгоритм просьба не смотреть, это мой личный тупой алгоритм сортировки. :) |
<html>
<head>
<title>О лосях</title>
<script type="text/javascript">
var $A = function(iterable) {
if (iterable) {
var result = [], i = iterable.length;
while (i) result[--i] = iterable[i];
return result;
}
return [];
};
function go() {
var ul = document.getElementsByTagName('ul')[0],
lis = $A(ul.getElementsByTagName('li'));
lis.sort(function(a, b) {
a = a.innerHTML.toLowerCase();
b = b.innerHTML.toLowerCase();
return a < b ? -1 : a > b ? 1 : 0;
});
for (var i = 0, length = lis.length; i < length; i++) ul.appendChild(lis[i]);
}
window.onload = function() {
document.body.onclick = go;
};
</script>
</head>
<body>
Правда о лосях.
<ul>
<li>
Лось - животное хитрое
</li>
<li>
яяяяя
</li>
<li>
И коварное
</li>
</ul>
</body>
</html>
|
Спасибо! :) Я даже почти понял, как это работает. Единственное, чего я так и не понял:
перед тем, как мы начинаем сортировку, у нас уже есть элементы списка. После сортировки мы добавляем ещё элементы командой append. Старые при этом нигде не удаляются! Куда же они деваются? |
Как оказалось, это не единственное, что я не понял. :)
Мне надо, чтобы сортировка была при загрузке, то есть, чтобы пользователь сразу видел уже отсортированный список. Пытаюсь делать так:
window.onload = function {go();}
Не работает. Так пробую: window.onload = go Тоже ноль внимания. Подскажите уж ламеру... |
Цитата:
Цитата:
Цитата:
Цитата:
|
За пояснения по элементам списка спасибо.
А какой вариант у Вас работает? Или оба? и как именно работает? Я, наверно, неверно выразился. Список-то у меня выводится, но не отсортированный по алфавиту. |
Цитата:
Цитата:
Попробуй ";" правильно расставить. |
Действительно, удаляя
window.onload = function() {
document.body.onclick = go;
};
не заметил и оставил конечные "};". Убил их и всё заработало! :dance: Спасибо за помощь! Тема закрыта. |
на сервере это лучше делать
Цитата:
|
может кому эта тема будет актуальна, есть способ сортировки попроще :)
-----------------------------------
<a onclick=sorrta()>Sort_АЯ</a> | <a onclick=sorrtz()>Sort_ЯА</a><br>
<ul>
<li>Вася
<li>Петя
<li>Аня
<li>Юра
</ul>
<script>
var myar= new Array();
var li1=document.getElementsByTagName('li');
function sorrta() {
for(var li2=0;li2<li1.length;li2++) {
myar[li2]=li1[li2].innerHTML;
}
myar.sort();
for(var li3=0;li3<myar.length;li3++) {
li1[li3].innerHTML=myar[li3];
}
}
function sorrtz() {
for(var li2=0;li2<li1.length;li2++) {
myar[li2]=li1[li2].innerHTML;
}
myar.sort();
myar.reverse();
for(var li3=0;li3<myar.length;li3++) {
li1[li3].innerHTML=myar[li3];
}
}
</script>
-------------------- рабочий пример: http://kachay.ucoz.org/load/27-1-0-185 |
| Часовой пояс GMT +3, время: 00:41. |