Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Изменить расположение в списке (https://javascript.ru/forum/dom-window/55909-izmenit-raspolozhenie-v-spiske.html)

Sweeft 20.05.2015 14:23

Изменить расположение в списке
 
Например есть список из десяти (li), как сделать так, чтобы при нажатии кнопки, первый и третий поменялись местами на JS

laimas 20.05.2015 14:48

На jQuery можно так:
$('button').click(function() {
    var li = $('ul li');
    li.eq(1).after(li.eq(0)).before(li.eq(2));
})

рони 20.05.2015 14:55

Sweeft,
а тут почитать не пробовали https://learn.javascript.ru/modifying-document

kostyanet 21.05.2015 21:30

Делается swop через доп-элемент. То есть эл2 идет в темп, эл2 меняется на эл1, а эл1 меняется на темп. Стандартная процедура.

рони 21.05.2015 22:34

kostyanet,
не могли бы вы привести код соотвествующий вашему описанию

рони 21.05.2015 23:47

Цитата:

Сообщение от Sweeft
первый и третий поменялись местами на JS

<ul id="act">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
</ul>
<script type="text/javascript">
var ul = document.getElementById('act');
function run(parent, max, min) {
     parent.insertBefore(parent.children[min], parent.children[max]);
     parent.insertBefore(parent.children[max], parent.children[min])
 };
run(ul, 2, 0); //max > min
</script>

kostyanet 22.05.2015 09:55

А, точно, там нет элемента временного хранения в явном виде, неявно им является родитель. Функция такая

var swap_nodes=function(node1,node2) {
			if(!node1 || !node2)
				return;
			file_list.replaceChild(node1,node2);
			file_list.insertBefore(node2,node1);
		};

рони 22.05.2015 11:25

Цитата:

Сообщение от kostyanet
Делается swop через доп-элемент.

верно
Цитата:

Сообщение от kostyanet
То есть эл2 идет в темп, эл2 меняется на эл1, а эл1 меняется на темп.

не верно.
Цитата:

Сообщение от kostyanet
Стандартная процедура.

угу

Цитата:

Сообщение от kostyanet
А, точно, там нет элемента временного хранения в явном виде, неявно им является родитель.

не понимаю
Цитата:

Сообщение от kostyanet
Функция такая

функция нерабочая

вариант с темр , для наглядности меняются элементы в разных родителях
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>
<ul id="act">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
</ul>
<ul id="act2">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
</ul>
<script type="text/javascript">
var node1 = document.querySelector('#act > li:nth-child(1)'), node2 = document.querySelector('#act2 > li:nth-child(3)');
var swap_nodes=function(node1,node2) {
			if(!node1 || !node2) return;
            var temp = document.createElement('abracadabra');
		    node1.parentNode.replaceChild(temp,node1);
			node2.parentNode.replaceChild(node1,node2);
            temp.parentNode.replaceChild(node2,temp)
		};

swap_nodes(node1,node2)
</script>


</body>

</html>

kostyanet 22.05.2015 16:47

Цитата:

Сообщение от рони
функция нерабочая

В смысле? Вроде работает и давно. Это в файловом поле тумбы меняются местами. Выделяешь какую надо и стрелками влево-вправо перемещаешь ее. Без нелепого драга. Затем скрипт собирает имена файлов с этих нодов и мержит их в текстовое поле. Все работает. Прямо сейчас добавляю товары и меняю местами когда файлы забираются пачкой и порядок недетерминирован.

SWOP существует на уровне ассемблера, но там не надо думать о временном хранилище, вроде бы все идет через аккумулятор. На языке высокого уровня швопы уже приходится обеспечивать вручную. Ну вот, а в DOM в роли аккумулятора оказывается родитель. Выткнул, сместилось, воткнул, готово. Я вообще не вдавался как оно работает, нашел какой-то баян, упростил до предела и запустил.

рони 22.05.2015 16:58

kostyanet,
дяденька, вы сейчас с кем разговаривали?
и где рабочий пример, если вам не трудно?


Часовой пояс GMT +3, время: 22:23.