序列化内部 Javascript 对象(如 Range)

5 javascript serialization range

我想存储一些内部 Javascript 对象,例如 Range,但我还没有找到保存它的方法。保存它的最佳方法是什么?我想将其连载,但我在网上没有找到任何内容。

有没有一个图书馆可以帮助做到这一点?jquery?

use*_*181 2

如果它是特定的范围,则将范围保存为相对对象,然后将其转换为简单的字符串等效项,

例如

var sel = window.getSelection();
if ( sel && sel.rangeCount > 0 ) {
    var range = window.getSelection().getRangeAt(0);
    var sC = range.startContainer, eC = range.endContainer;
    
    
    var A = [];
    while (sC !== editor && sC) {
        A.push(getNodeIndex(sC));
        sC = sC.parentNode;
    }
    
    
    var B = [];
    while (eC && eC !== editor) {
        B.push(getNodeIndex(eC));
        eC = eC.parentNode;
    }
    if ( B.length==0 ) {
        B=A;
        eC=sC;
    }

    var caretPosition = {"sC": A, "sO": range.startOffset, "eC": B, "eO": range.endOffset}; 
Run Code Online (Sandbox Code Playgroud)

然后根据需要将其转换为字符串:

function getCP2String() {
   return _caretPosition.sC+';'+_caretPosition.sO+';'+_caretPosition.eC+';'+_caretPosition.eO;
}
Run Code Online (Sandbox Code Playgroud)

然后在必要时反转此操作:

function doRestoreFromString(serialTx) {   

   caretPosition.sC=serialTx.split(';')[0].split(',');
   _caretPosition.sO=serialTx.split(';')[1].split(',');
   _caretPosition.eC=serialTx.split(';')[2].split(',');
   _caretPosition.eO=serialTx.split(';')[3].split(',');

   console.log('sC='+_caretPosition.sC);
   console.log('sO='+_caretPosition.sO);
   console.log('eC='+_caretPosition.eC);
   console.log('eO='+_caretPosition.eO);

   doRestoreRange();
}
Run Code Online (Sandbox Code Playgroud)

有关完整的工作示例,请参阅https://jsfiddle.net/Abeeee/2gr1vchm/ 。