如何让用户在文本中选择范围?

时间:2013-10-04 19:28:38

标签: javascript jquery user-interface selection rich-text-editor

假设我正在创建一个类似维基百科的网站,用户可以在需要引用的文本片段上添加[引证需要]。我的基本解决方案是将每个句子变成一个链接,点击后,它会在其后面加上[引证]。

但我不喜欢这个解决方案,因为它在句子级别工作。如果用户想要[引用需要]多个句子,或者可能是句子的一部分,那么它将不起作用。所以我想,如果我可以让用户选择一个任意范围,就像在普通的文本编辑器中一样,这将是很酷的。

我有一个额外的约束:用户无法编辑文本。我甚至不能让他们认为他们可以编辑文本,所以我宁愿避免,如果可以的话。我知道这很奇怪。

我认为这是可能的,因为谷歌文档做到了,但我不确定。这甚至可能吗?是否可以在textarea之外?我有什么选择?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以设置类似的格式(如果您允许编辑):

  

这是我的段落。[这里包含近100个字符] [需要引证]。

所以方括号将代表这个范围需要引用。

或者您可以获取用户选择的文本并对其进行相应格式化,如:

<强> See here for working jsFiddle

function getSelectionText() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    alert(html);
}

代码来自Tim DownReturn HTML from a user-selected text