如何在DOM树中保存/恢复对象的位置?

问题描述:

如果我有以下的html:如何在DOM树中保存/恢复对象的位置?

<ul> 
    <li>test</li> 
    <li class='draggable'>special</li> 
    <li>test</li> 
</ul> 

如何保存.draggable目前的DOM位置(一般)?

我计划通过追加到document.body通过拖拽此.draggable并使position: absolute;但如果用户无法用它做任何事情,我需要恢复。

我可以用克隆做到这一点,隐藏原来的,并使用代理拖动,但我觉得这个问题可能已经更直接地解决了。

想法?

+2

看看jQueryUI的可拖动,已经“恢复”中建 – charlietfl 2012-02-29 01:21:10

要保存对象的位置,您可以将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); 
    } 
} 
+0

嗨jfriend00选择,我遇到了这个答案在谷歌搜索和想实现它为我正在工作的网站,但遇到一些空/未定义的变量错误。你介意看一下这个jsFiddle来看看我的实现可能会出错吗? http://jsfiddle.net/LH9Xu/1/ – 2013-07-08 23:34:38

+1

@ R.J。 - 请参阅此jsFiddle中的更正:http://jsfiddle.net/jfriend00/R43d6/。你必须保存保存的位置,你必须传递一个元素,而不是选择器。 – jfriend00 2013-07-09 01:15:37

+0

真棒,感谢您的帮助! – 2013-07-09 15:21:33