如何在DOM树中保存/恢复对象的位置?
如果我有以下的html:如何在DOM树中保存/恢复对象的位置?
<ul>
<li>test</li>
<li class='draggable'>special</li>
<li>test</li>
</ul>
如何保存.draggable
目前的DOM位置(一般)?
我计划通过追加到document.body
通过拖拽此.draggable
并使position: absolute;
但如果用户无法用它做任何事情,我需要恢复。
我可以用克隆做到这一点,隐藏原来的,并使用代理拖动,但我觉得这个问题可能已经更直接地解决了。
想法?
要保存对象的位置,您可以将DOM引用保存到它之前的同级。如果之前没有兄弟姐妹,则保存父母。
function saveLocation(element) {
var loc = {};
var item = $(element).prev();
loc.element = element;
if (item.length) {
loc.prev = item[0];
} else {
loc.parent = $(element).parent()[0];
}
return(loc);
}
然后,恢复:
function restoreLocation(loc) {
if (loc.parent) {
$(loc.parent).prepend(loc.element);
} else {
$(loc.prev).after(loc.element);
}
}
嗨jfriend00选择,我遇到了这个答案在谷歌搜索和想实现它为我正在工作的网站,但遇到一些空/未定义的变量错误。你介意看一下这个jsFiddle来看看我的实现可能会出错吗? http://jsfiddle.net/LH9Xu/1/ – 2013-07-08 23:34:38
@ R.J。 - 请参阅此jsFiddle中的更正:http://jsfiddle.net/jfriend00/R43d6/。你必须保存保存的位置,你必须传递一个元素,而不是选择器。 – jfriend00 2013-07-09 01:15:37
真棒,感谢您的帮助! – 2013-07-09 15:21:33
看看jQueryUI的可拖动,已经“恢复”中建 – charlietfl 2012-02-29 01:21:10