-1

就像我在主题中提到的那样,我正在寻找一个插件来保存我标记的文本并在失去焦点后可以恢复它。就像我过去使用的一个名为 Rangy 的 JS 库一样。有没有这样的插件,或者有人知道我该如何处理这种问题吗?

关于阿德里安

function gEBI(id) {
    return document.getElementById(id);
}

var savedSel;
var savedSelActiveElement;

function saveSelection() {

    if (savedSel) {
      //  rangy.removeMarkers(savedSel);
    }
    savedSel = rangy.saveSelection();
    savedSelActiveElement = document.activeElement;

}

function restoreSelection() {
    if (savedSel) {
        rangy.restoreSelection(savedSel, true);

        window.setTimeout(function() {
            if (savedSelActiveElement && typeof savedSelActiveElement.focus != "undefined") {
                savedSelActiveElement.focus();
            }
        }, 1);
    }
}
$(document).ready(function()
{
    try {
        document.execCommand("MultipleSelection", null, true);
    } catch(ex) {}
    rangy.init();

     // Enable buttons
    var saveRestoreModule = rangy.modules.SaveRestore;
    if (rangy.supported && saveRestoreModule && saveRestoreModule.supported) {

        var saveButton = gEBI("saveButton");
        //saveButton.disabled = false;
        saveButton.ontouchstart = saveButton.onmousedown = function() {
            saveSelection();
            return false;
        };

        $('.EditorTab').mousedown(function(){
            saveSelection();
            return false;
        });
});
4

1 回答 1

0

以下解决方案将允许您存储和恢复任意数量的范围,但它假定您在恢复这些范围时没有破坏这些范围所附加的节点。

var SelectionStore = (function() {

    var savedRanges = {};

    return {

        store: function(saveIdentifier) {
            var ranges = rangy.getSelection().getAllRanges();
            savedRanges[saveIdentifier] = ranges;
            return ranges;
        },

        restore: function(saveIdentifier) {
            var i, selection;
            selection = rangy.getSelection();
            if (!savedRanges[saveIdentifier]) throw new Error('Invalid saved selection identifier used. Selection not found for ID: ' + saveIdentifier);
            selection.removeAllRanges();
            for (i in savedRanges[saveIdentifier]) selection.addRange(savedRanges[saveIdentifier][i]);
        }

    }

})();

使用示例:

//store the current selection
SelectionStore.store('Tab1');

//restore a selection
SelectionStore.restore('Tab1');
于 2013-08-26T14:27:19.587 回答