Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отсортировать nodelist (https://javascript.ru/forum/misc/25489-otsortirovat-nodelist.html)

рони 07.02.2012 05:50

Отсортировать 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>

devote 07.02.2012 06:17

Цитата:

Сообщение от рони
Может кто захочет голову поломать ...

зачем ломать голову? уж давно переломали ее..
метод getElementsByTagName итак возвращает элементы в отсортированном порядке.

рони 07.02.2012 07:13

Цитата:

Сообщение от devote
метод getElementsByTagName итак возвращает элементы в отсортированном порядке

???
Цитата:

Сообщение от рони
их надо поменять местами по определённому порядку

порядок меняеться несколько раз, а getElementsByTagName выдаст текущее положение а не то что необходимо установить

рони 07.02.2012 07:20

devote,
понажимайте на кнопку go, элементы должны занимать тот порядок что отображаеться в диве test

devote 07.02.2012 08:00

Цитата:

Сообщение от рони
понажимайте на кнопку go, элементы должны занимать тот порядок что отображаеться в диве test

а кто вам мешает их расположить так как вам угодно?

рони 07.02.2012 14:32

devote,
Если вам не трудно предложите свой алгоритм решения?

Aetae 07.02.2012 17:59

<!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>

на коленке, но суть должна быть ясна.

рони 07.02.2012 22:03

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.