Отсортировать 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, время: 22:20. |