Ответ 1
С помощью jQuery:
var e = $("#div_2");
// move up:
e.prev().insertAfter(e);
// move down:
e.next().insertBefore(e);
Я хочу, чтобы javascript мог перемещать элемент в одном месте вверх или вниз в дереве dom внутри определенного известного родителя с помощью javascript (или jquery в порядке), но я хочу, чтобы script знал, когда элемент является первым или последний элемент внутри родителя и не перемещаться. например, если у меня есть следующее...
<div id='parent_div'>
<div id='div_1'></div>
<div id='div_2'></div>
<div id='div_3'></div>
</div>
щелкнув по кнопке, я хочу передать известный идентификатор (скажем, div_2
) и переместить его в положение над ним, заменив его позицию на элемент, который был ранее перед ним (в этом случае div_1
). Иды элементов не должны меняться, и их новое положение не обязательно должно быть известно, по крайней мере, если только они не будут перемещены снова.
С помощью jQuery:
var e = $("#div_2");
// move up:
e.prev().insertAfter(e);
// move down:
e.next().insertBefore(e);
Переместите element
"вверх":
if(element.previousElementSibling)
element.parentNode.insertBefore(element, element.previousElementSibling);
Переместите element
"вниз":
if(element.nextElementSibling)
element.parentNode.insertBefore(element.nextElementSibling, element);
function moveUp(element) {
if(element.previousElementSibling)
element.parentNode.insertBefore(element, element.previousElementSibling);
}
function moveDown(element) {
if(element.nextElementSibling)
element.parentNode.insertBefore(element.nextElementSibling, element);
}
document.querySelector('ul').addEventListener('click', function(e) {
if(e.target.className === 'down') moveDown(e.target.parentNode);
else if(e.target.className === 'up') moveUp(e.target.parentNode);
});
.up, .down { cursor: pointer; }
.up:after { content: '△'; }
.up:hover:after { content: '▲'; }
.down:after { content: '▽'; }
.down:hover:after { content: '▼'; }
<ul>
<li>1<span class="up"></span><span class="down"></span></li>
<li>2<span class="up"></span><span class="down"></span></li>
<li>3<span class="up"></span><span class="down"></span></li>
<li>4<span class="up"></span><span class="down"></span></li>
<li>5<span class="up"></span><span class="down"></span></li>
</ul>
Получите все дочерние div с родительским div id (#parent_div), используя функцию $.each jQuery. предположим, что вы хотите обменять div3 на div2, тогда индекс div3 будет равен 2. use $(# div_3).insertBefore(# div_2)
Вы можете использовать JQuery, встроенный в метод .index()
, чтобы получить местоположение дочернего элемента и получить значение .length
, чтобы сформировать родительский элемент, чтобы узнать количество элементов.
Если index
возвращается 0, это первый элемент, если index
возвращает длину родительского элемента -1, то вы знаете, что это последний элемент.
Для перемещения элементов они могут использоваться .insertBefore
и .prev
для перемещения элемента вверх.
var elm = $("selector_for_the_element");
elm.insertBefore(elm.prev());
Для перемещения элемета вниз вы можете использовать insertAfter
и .next
var elm = $("selector_for_the_element");
elm.insertAfter(elm.next());