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

标签 javascript range serialization

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

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

最佳答案

如果具体是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/一个完整的工作示例。

关于javascript - 序列化内部 Javascript 对象(如 Range),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965968/

相关文章:

javascript - 为 async.parallel 编写测试。

c++ - 如果我尝试在 C++ 中将大于 pow(2,64)-1 的值分配给 unsigned long long 会怎样?

ruby - 为什么 ruby​​ 中的 backward for 循环不起作用?例如。我在 10..1

Node.js 将自定义对象序列化/反序列化到 mongodb

c++ - void* 指针类型的 boost 序列化无法编译

javascript - 对象作为来自 MongoDB 的 React 子数据无效

javascript - 无法清除 Angular 4 中粘贴文本中的空格

javascript - Backbone Javascript - 找不到函数?

python - 在Python中解析用户输入

java - 接口(interface)可以扩展 Serializable 接口(interface)吗?