Сортировка элементов списка тупым способом
Есть маркированный список. Требуется его отсортировать по алфавиту по клику. Пытаюсь делать это вот так:
<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, время: 21:59. |