1

我正在使用新的Firepad 实时文本协作服务

我想getSelection在用户选择的框中的文本上使用 JavaScript 方法。

但是,无论出于何种原因,我的代码都无法正常工作。

我的 JavaScript:

function myFunction()
{
    alert(window.getSelection());
}

HTML:

<button onclick="myFunction();">Get Selected Text in Firepad</button>

我的测试站点

4

3 回答 3

2

查看插件后,FirePad 似乎正在使用textarea.

根据另一个 SO post的回答,似乎textareas不使用与其他节点相同的选择范围。

接受的答案是这样解释的:

textarea 节点有额外的奇怪之处。如果我没记错的话,当您在 IE 中选择它们时,它们的行为与任何其他节点一样,但在其他浏览器中,它们具有独立的选择范围,通过节点上的 .selectionEnd 和 .selectionStart 属性公开。

投票最高的答案显示了一个解决方案。

该解决方案直接使用对节点的引用,并使用元素的和属性textarea从那里获取选定的范围,类似于:selectionEndselectionStart

function myFunction() {
    var e = document.getElementById('thearea');

    //Mozilla and DOM 3.0
    if ('selectionStart' in e) {
        var l = e.selectionEnd - e.selectionStart;

        var start = e.selectionStart,
            end = e.selectionEnd,
            length = l,
            text = e.value.substr(e.selectionStart, l);

        alert(text);
    }
}

演示- 使用selectionStartandselectionEndfortextarea


我不确定这些天在所有浏览器中是否都相同,但上面的代码和链接的 SO 中的附加信息有望帮助您获得所需的结果。

于 2013-04-26T15:36:36.083 回答
1

Firepad 基于 CodeMirror。您应该使用 CodeMirror 公开的函数来执行此操作,而不是直接从 DOM 中获取选择。

在此处查看 getSelection():http: //codemirror.net/doc/manual.html

于 2013-08-31T19:40:17.747 回答
0

你可以使用这些功能

firepad.getHtmlFromSelection();
firepad.insertTextAtCursor(textPieces);
firepad.getHtml();  
firepad.getText();
firepad.insertText(index,textPieces);
于 2019-12-25T03:40:50.400 回答