5

我正在开发一个将处理突出显示的文本的Firefox 扩展。

在独立页面上,我可以通过以下方式获取所选文本:

selectedText = document.selection?document.selection.createRange().text;

然后我会在有问题的文本区域上使用字符串操作来操作选定的文本。不幸的是,这对于插件来说是不可能的,因为我不知道用户选择的文本在哪里。

有没有办法获取选择文本的元素的名称或在没有元素名称的情况下更改选定的文本?

4

2 回答 2

4
selectedText = content.getSelection().toString();
于 2009-03-21T23:50:26.910 回答
0

您需要从用户选择中获取范围对象:

var userSelection;
if (window.getSelection)
    userSelection = window.getSelection();
else if (document.selection)    // should come last; Opera!
    userSelection = document.selection.createRange();

var rangeObject = getRangeObject(userSelection);

...

function getRangeObject(selectionObject) {
    if (selectionObject.getRangeAt)
        return selectionObject.getRangeAt(0);
    else { // Safari!
        var range = document.createRange();
        range.setStart(selectionObject.anchorNode, selectionObject.anchorOffset);
        range.setEnd(selectionObject.focusNode, selectionObject.focusOffset);
        return range;
    }
}

...

Range 对象具有开始和结束容器节点等。

更多信息可以在 Quirksmode和 w3.org找到

于 2009-02-06T06:57:45.473 回答