简体   繁体   English

contenteditable选定的文本保存和恢复

[英]contenteditable selected text save and restore

I came across this post that shows 2 functions on how to save and restore selected text from a contenteditable div. 我发现这篇文章显示了如何从一个可信的div中保存和恢复所选文本的2个功能。 I have the below div set as contenteditable and the 2 function from the other post. 我有下面的div设置为contenteditable和另一个帖子的2功能。 How to i use these functions to save and restore selected text. 如何使用这些功能来保存和恢复所选文本。

<div style="width:300px;padding:10px;" contenteditable="true">test test test test</div>

<script>
function saveSelection() {
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            return sel.getRangeAt(0);
        }
    } else if (document.selection && document.selection.createRange) {
        return document.selection.createRange();
    }
    return null;
}

function restoreSelection(range) {
    if (range) {
        if (window.getSelection) {
            sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (document.selection && range.select) {
            range.select();
        }
    }
}
</script>

A typical use would be displaying some kind of widget or dialog to accept input from the user (thus potentially destroying the original selection) and restoring the selection after that widget has been hidden. 典型的用途是显示某种小部件或对话框以接受来自用户的输入(因此可能破坏原始选择)并在隐藏该小部件之后恢复选择。 Actually using the functions is quite simple; 实际上使用这些功能非常简单; the biggest danger is trying to save the selection after it has already been destroyed. 最大的危险是在它被摧毁后试图保存选择。

Here's a simple example. 这是一个简单的例子。 It displays a text input and overwrites the selection in the editable <div> with the text from that input. 它显示文本输入并使用该输入中的文本覆盖可编辑<div>的选择。 There's too much code to paste in here, so here's the full code: http://www.jsfiddle.net/timdown/cCAWC/3/ 这里有太多的代码要粘贴,所以这里是完整的代码: http//www.jsfiddle.net/timdown/cCAWC/3/

Extract: 提取:

<div id="test" contenteditable="true">Some editable text</div>
<input type="button" unselectable="on" onclick="displayTextInserter();"
    value="Insert text">
<div id="textInserter">
    <input type="text" id="textToInsert">
    <input type="button" onclick="insertText()" value="Insert">
</div>

<script type="text/javascript">
var selRange;

function displayTextInserter() {
    selRange = saveSelection();
    document.getElementById("textInserter").style.display = "block";
    document.getElementById("textToInsert").focus();
}     

function insertText() {
    var text = document.getElementById("textToInsert").value;
    document.getElementById("textInserter").style.display = "none";
    restoreSelection(selRange);
    document.getElementById("test").focus();
    insertTextAtCursor(text);
}
</script>

just one recommendation: 只有一个建议:

it is hard to work with native browser selection + contenteditable + handle all different browser aspects + save and restore selection and etc from scratch.. 很难使用本机浏览器选择+ contenteditable +处理所有不同的浏览器方面+从头开始保存和恢复选择等。

I would recomend rangy https://code.google.com/p/rangy/wiki/SelectionSaveRestoreModule 我会推荐rangy https://code.google.com/p/rangy/wiki/SelectionSaveRestoreModule
that specially done to make all hard work with selection for you 专门为您做出选择的所有努力工作

check the docs, it is easy to use ;) hope it will help you 检查文档,它很容易使用;)希望它会帮助你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM