我想存储一些像Range这样的内部Javascript对象,但我还没有找到保存它的方法。保存它的最佳方法是什么? 我想要序列化它,但我没有在网上找到任何东西。
是否有图书馆可以帮助您做到这一点? jquery的?
答案 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()函数。见这里: