Javascript 如何使用循环引用保存对象?

Javascript 如何使用循环引用保存对象?,javascript,json,serialization,storage,circular-reference,Javascript,Json,Serialization,Storage,Circular Reference,我想在本地保存一个具有循环引用的对象。我有什么选择 我的第一个想法是使用HTML5本地存储,但由于循环引用,我无法对该对象进行字符串化 具体来说,我试图保存当前选择的DOMSelection对象 例如: var sel = window.getSelection(); var selstring = JSON.stringify(sel); // Breaks here ... localStorage.setItem("selection",selstring); 我现在可以让s

我想在本地保存一个具有循环引用的对象。我有什么选择

我的第一个想法是使用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对象,它不足以满足我的需要

是否有其他方法可以保存此对象?唯一的要求是它运行在mobile safari中,其他任何东西都可以运行。解决方案可以是javascript或jquery(或者任何其他js库,如果需要的话)


感谢您提供的帮助。

这里的答案在于了解您真正需要持久存储哪些数据,并将其最小化为仅需要的数据,然后添加一个方法或函数以仅获取该信息,然后保存该信息。我不知道您的应用程序,但对于文本选择,您可能只需要持久指示它是哪个对象以及文本选择的起点和终点


然后,在恢复端,您将构建一个函数,使用存储的数据构建一个选择。它不像序列化/反序列化那么简单,但它可以工作。

请检查。它有一个文件,
cycle.js
,该文件可以将具有循环引用的对象转换为JSON并使用JSONPath返回。请参阅回购协议的“阅读我”和文件注释中的最后一段。

请参阅是的,这是我想留下作为最后手段的内容,因为DOMSelection对象似乎相当复杂。事实上,我意识到我根本不需要存储DOMSelection,并且我找到了一个解决方案来满足我的需要。我会将此标记为已回答,因为它最直接地回答了我最初的问题。不幸的是,我无法测试它是否能与存储DOMSelection对象一起工作,因为事实证明我在这个项目中不需要它,但无论如何,这是一个特定的示例。我如何在代码中放入cycle.js?我也有类似的问题。通过将文件包含在脚本标记中。但是请注意,这远远不是最佳解决方案。相反,您应该确保对象没有循环引用,并且除非绝对需要,否则永远不要对DOM节点进行JSON编码。