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

时间:2009-06-08 17:15:08

标签: javascript range serialization

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

是否有图书馆可以帮助您做到这一点? jquery的?

2 个答案:

答案 0 :(得分:1)

如果具体是Ranges,那么把range保存为一个相对对象,然后把它变成一个简单的等价字符串,

例如

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/

答案 1 :(得分:0)

查看浮动的Javascript stringify()函数。见这里:

http://www.thomasfrank.se/json_stringify_revisited.html

Direct link to the code