Вопрос по jquery – jQuery - переместить элемент и вернуться в его точное предыдущее местоположение?
Я пытаюсь использовать jQuery для перемещения элемента из одного места в другое в DOM. Рядом с ним есть элементы, идентичные исходному контейнеру, так как я могу сохранить его точное предыдущее местоположение, чтобы он вернулся к нему? Вот пример ...
<div class="container"></div>
<ul>
<li></li>
<li><div class="move">Content</div></li>
<li></li>
<li><div class="move">Content</div></li>
<li></li>
</ul>
... div "move" по отдельности перемещаются в div "container", а затем возвращаются в свое предыдущее местоположение по событию с помощью jQuery .appendTo (). Как я могу обеспечить, чтобы каждый div «move» возвращался в свое точное предыдущее местоположение, определяя, откуда он был перемещен (его точное местоположение в DOM относительно документа или другой указанный родительский контейнер)?
EDIT: я исправил классы в div, так как в конкретном случае, с которым я работаю, элементы списка являются точными копиями (структурно), с уникальным содержимым в соответствующих элементах. Кроме того, событие для перемещения div «move» обратно в исходное местоположение - это нажатие кнопки внутри него. Как перемещенный элемент узнает, куда нужно вернуться назад после перемещения (в частности, как он узнает, какой элемент списка в списке)?
clone
их,append
их и, наконец,hide
оригинальный div и взаменremove
клонированный div иshow
оригинал
.is(':visible')
хотя
.parent()
в переменной, затем используйте.append()
или.appendTo()
чтобы вернуть его, когда будет готов.
.parent()
будет хранить относительный индекс вложенного элемента, из которого вы вызываете его. Действительно полезная информация, я тоже скоро добавлю +1.
поэтому я надеюсь, что они применимы к вашей ситуации.
Я думаю, у тебя есть обработчик кликов наdiv.move
элементы, которые перемещают их вcontainer
div.
CSS:
.placeholder { display:none; }
JS:
var id,
gid = 0;
$('.move').click(function(e){
if(!$(this).parents('.container')){
// Move to container
id = 'placeholder-' + gid++;
$(this)
.before('<div class="placeholder ' + id + '"></div>') // Save a DOM "bookmark"
.appendTo('.container') // Move the element to container
.data('placeholder', id); // Store it's placeholder's info
}
else{
// Move back out of container
$(this)
.appendTo('.placeholder.' + $(this).data('placeholder')) // Move it back to it's proper location
.unwrap() // Remove the placeholder
.data('placeholder', undefined); // Unset placeholder data
}
});
Ваш HTML будет выглядеть так после нажатия на первыйdiv.move
:
<div class="container">
<div class="move>Content</div>
</div>
<ul>
<li></li>
<li><div class="placeholder placeholder-0"></div></li>
<li></li>
<li><div class="move">Content</div></li>
<li></li>
</ul>
У меня это работает, хотя приведенный выше код не проверен. Надеюсь, это передает идею. Что мне нравится в этом подходе:
Нет дублирования элементов (например, это может нарушить требования уникального идентификатора) Минимальное воздействие DOM События и обработчики перемещенных элементов остаются нетронутыми, но не дублируютсяЭто идеально? Нет, но это работает хорошо и довольно чисто. YMMV.
Ура