0

いくつかのスパンをドラッグできるコンテナdivがあります。彼らのためにUNDO関数を作りたいです。私は考えています:

  1. スパン属性が変更されると(position、css)、スクリプトはDOMの変更を検出します
  2. DOMの変更はHTML5localStorageを介して保存されます
  3. UNDO関数が呼び出されると、DOMの最後のバージョンが現在のバージョンに置き換わります。

最後のDOM状態を記録する基本的なlocalStorageコードがあります。

$('#undo').live('click', function() {

var testObject = $('#container').html();

// Put the object into storage
localStorage.setItem('testObject', JSON.stringify(testObject));

// Retrieve the object from storage
var retrievedObject = localStorage.getItem('testObject');

alert( retrievedObject );
// retrievedObject should now replace the current DOM

});
});

現在、このコードは現在のDOMを取得して保存します。アラートは、ローカルストレージにあるものを表示しています。おそらく、いくつかのDOM状態を格納し、それらを変数に入れようとする必要があります。その後、各UNDOで、1つの変数を削除します...これがそれを行う方法かどうかはわかりません。

これに関する入力はありますか?ありがとうございました

4

1 に答える 1

0

まず、コードに注目してください。それはかなり正しいと思いますし、うまくいくはずです。結局のところ、localStorage に文字列を入れて、それを取得しているだけです。

さて、いくつかの考え:

  • 「#container」の「html」とは?それが単なる文字列の束であれば、大丈夫です。そうしないと、「復元」するたびに、DOM のそのブランチが再構築されます。これが「重い」かどうかは、正確に何をしているか次第です。
  • localStorage を使用する理由 localStorage にあるものは、それが作成されたブラウザに対してローカルです。これは、ユーザーが別のブラウザー インスタンスから同じページを開いた場合、UNDO 機能が「使用できない」ことを意味します。
  • ブラウザのデフォルトの UNDO では十分ではありませんか? しかし、そうではないと思います。単に「<input type="text" />」または「<textarea />」を含むものを元に戻していないと思います

UNDO可能な操作の「スタック」を実装するつもりですか? あなたがそうするなら、それはクールでしょう;)

于 2010-03-10T17:42:47.430 に答える