在自定义文本输入中,getSelection将无法为我找到所选文本

时间:2013-04-26 15:12:54

标签: javascript firebase getselection firepad

我正在使用新的Firepad realtime text collaboration service

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

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

我的JavaScript:

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

HTML:

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

My test site

3 个答案:

答案 0 :(得分:2)

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

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

accepted answer解释如下:

  

textarea节点还有一些奇怪的现象。如果我记得   在IE中选择它们时,它们的行为与任何其他节点一样正确   但在其他浏览器中,它们具有独立的选择范围   通过.selectionEnd和.selectionStart属性公开   节点

highest voted answer显示了解决方案。

解决方案直接使用对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);
    }
}

DEMO - 将selectionStartselectionEnd用于textarea


我不确定这些天所有浏览器是否相同,但上述代码和链接SO中的其他信息应该有助于您获得所需的结果。

答案 1 :(得分:1)

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

在这里查看getSelection(): http://codemirror.net/doc/manual.html

答案 2 :(得分:0)

您可以使用功能

firepad.getHtmlFromSelection();
firepad.insertTextAtCursor(textPieces);
firepad.getHtml();  
firepad.getText();
firepad.insertText(index,textPieces);