2012-02-29 10 views
2

私は次の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

答えて

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に建てられたオプションを「元に戻す」があり、私はGoogle検索でこの答えに出くわしたし、実装しようとしていますそれは私が取り組んでいるサイトのために、いくつかのnull /未定義の変数エラーに走っています。私は実装で間違っているかもしれないかを見るためにこのjsFiddleを覗いてみてください。 http://jsfiddle.net/LH9Xu/1/ –

+1

@ R.J。 - このjsFiddle:http://jsfiddle.net/jfriend00/R43d6/の修正を参照してください。保存された場所を保存する必要があり、セレクタではなく要素を渡す必要があります。 – jfriend00

+0

恐ろしい、助けてくれてありがとう! –

関連する問題