7

循環参照を持つオブジェクトをローカルに保存したい。私のオプションは何ですか?

最初に考えたのは HTML5 ローカル ストレージを使用することでしたが、循環参照のためにこのオブジェクトを文字列化できません。

具体的には、現在の選択の DOMSelection オブジェクトを保存しようとしています。

例:

  var sel = window.getSelection();
  var selstring = JSON.stringify(sel); // Breaks here ...
  localStorage.setItem("selection",selstring);

stringify を機能させる唯一の方法は、次のように特定のオブジェクトを無視することです。

var selstring = JSON.stringify(sel,function(k,v){
    if( k=="anchorNode" ||
        k=="baseNode" ||
        k=="extentNode" ||
        k=="focusNode") return undefined;

    return v;
});

しかし、これにより、かなり空の DOMSelection オブジェクトが残り、必要なものには十分ではありません。

このオブジェクトを保存する他の方法はありますか? 唯一の要件は、モバイル サファリで動作することです。それ以外は何でも構いません。解決策は、javascript または jquery (または必要に応じて他の js lib) のいずれかです。

ご協力いただきありがとうございます。

4

2 に答える 2

3

ここでの答えは、永続的に保存する必要があるデータを理解し、それを必要なものだけに最小限に抑え、その情報だけを取得するメソッドまたは関数を追加して保存することです。あなたのアプリケーションはわかりませんが、テキスト選択の場合、それがどのオブジェクトであったか、テキスト選択の開始点と終了点を永続的に示す必要があるだけでしょう。

次に、復元側で、保存したデータを使用してセレクションを作成する関数を作成します。シリアル化/逆シリアル化ほど単純ではありませんが、機能します。

于 2011-09-14T17:48:20.093 に答える
3

Crockford の JSON-JS GitHub リポジトリ を確認してください。cycle.js循環参照を持つオブジェクトを JSON に変換し、JSONPath を使用して元に戻すことができるファイルがあります。リポジトリの read me とファイルのコメントの最後の段落を参照してください。

于 2011-09-14T17:48:31.520 に答える