Отсортировать nodelist
Может кто захочет голову поломать ...
Задача: есть контейнер в данном случае это див list, изначально в нём элементы находятся упорядоченно, затем их надо поменять местами по определённому порядку, для примера используется рандомный массив arr ... макет ниже ... :write: надеюсь я понятно всё описал ... для наглядности элементы содержат цифры, но сортировать надо ориентируясь не на них ... id тоже нет. <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <title></title> </head> <body> <div id="test"></div> <div id="list" ></div> <input type="button" value="go" onclick="n(arr.sort(rand))"/> <script type="text/javascript"> var arr = []; var list = document.getElementById('list'); var test = document.getElementById('test'); function spisok(c) { for (var a = 0; a < c; a++) { var b = document.createElement("P"); b.innerHTML = "Элемент списка №" + a; list.appendChild(b); arr[a] = a } test.innerHTML = arr }; function rand() { return .5 - Math.random() } spisok(5) var n = function (c) { var e = list.getElementsByTagName("p"); test.innerHTML = c; // код ? }; </script> </body> </html> |
Цитата:
метод getElementsByTagName итак возвращает элементы в отсортированном порядке. |
Цитата:
Цитата:
|
devote,
понажимайте на кнопку go, элементы должны занимать тот порядок что отображаеться в диве test |
Цитата:
|
devote,
Если вам не трудно предложите свой алгоритм решения? |
<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <title></title> </head> <body> <div id="test"></div> <div id="list" ></div> <input type="button" value="go" onclick="n(arr.sort(rand))"/> <script type="text/javascript"> var arr = []; var list = document.getElementById('list'); var test = document.getElementById('test'); function spisok(c) { for (var a = 0; a < c; a++) { var b = document.createElement("P"); b.innerHTML = "Элемент списка №" + a; list.appendChild(b); arr[a] = a } test.innerHTML = arr }; function rand() { return .5 - Math.random() } spisok(5) elem_arr = [].slice.call( list.getElementsByTagName("p") ); //преобразуем в массив, для ие свой вариант написать надо бут. var n = function (c) { test.innerHTML = c; for(var i = c.length, j=0; j<i ; j++ ) list.appendChild( elem_arr[ c[j] ] ) }; </script> </body> </html> на коленке, но суть должна быть ясна. |
Aetae,
Спасибо!!! :dance: Вариант с учётом ИЕ <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251" /> <title></title> </head> <body> <div id="list" ></div><div id="test"></div> <input type="button" value="go" onclick="n(arr.sort(rand))"/> <script type="text/javascript"> var arr = []; var list = document.getElementById('list'); var test = document.getElementById('test'); function spisok(c) { for (var a = 0; a < c; a++) { var b = document.createElement("P"); b.innerHTML = "Элемент списка №" + a; list.appendChild(b); arr[a] = a } test.innerHTML = arr }; function rand() { return .5 - Math.random() } spisok(5) var n = function () { for (var c = list.getElementsByTagName("p"), d = [], a = 0; a < c.length; a++) d[a] = c[a]; return function (a) { for (var b = 0; b < a.length; b++) list.appendChild(d[a[b]]); test.innerHTML = a } }(); </script> </body> </html> |
Часовой пояс GMT +3, время: 09:23. |