4

我想存储一些内部 Javascript 对象,例如 Range,但我还没有找到保存它的方法。保存它的最佳方法是什么?我想序列化它,但我在网上没有找到任何东西。

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

4

1 回答 1

1

如果具体是 Ranges,则将范围保存为相对对象,然后将其转换为简单的字符串等价物,

例如

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}; 

如果需要,然后将其转换为字符串:

function getCP2String() {
   return _caretPosition.sC+';'+_caretPosition.sO+';'+_caretPosition.eC+';'+_caretPosition.eO;
}

然后在必要时反转这个:

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();
}

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

于 2021-01-13T14:58:30.940 回答