首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将所选文本扩展为整个单词

将所选文本扩展为整个单词
EN

Stack Overflow用户
提问于 2011-10-18 22:55:47
回答 2查看 2K关注 0票数 2

在IE中,我可以这样做:

代码语言:javascript
复制
var rng = document.selection.createRange();
rng.expand("word");
txt = rng.text;

我如何在IE之外做同样的事情?

Select whole word with getSelection建议使用window.getSelection().modify(),但我不想修改选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 09:38:12

要恢复选择,请执行以下操作:

代码语言:javascript
复制
var range = selection.getRangeAt(0); // check for rangeCount in advance
var oldRange = document.createRange();
oldRange.setStart(range.startContainer, range.startOffset);
oldRange.setEnd(range.endContainer, range.endOffset);
...modify the selection and do whatever you need...
selection.removeAllRanges();
selection.addRange(oldRange);
票数 0
EN

Stack Overflow用户

发布于 2011-12-14 23:01:07

我已经接受了Alexander的回答,因为它应该跨元素边界工作。我不需要这个,所以我实际使用的解决方案如下所示。

代码语言:javascript
复制
function GetSelectedText()
{
    var t = '';
    if (window.getSelection) // FF4 with one tab open?
    {
        var rng = window.getSelection().getRangeAt(0);
        expandtoword(rng);
        t = rng.toString();
    }
    else if (document.getSelection) // FF4 with multiple tabs open?
    {
        var rng = document.getSelection().getRangeAt(0);
        expandtoword(rng);
        t = rng.toString();
    }
    else if (document.selection) // IE8
    {
        var rng = document.selection.createRange();
        // expand range to enclose any word partially enclosed in it
        rng.expand("word");
        t = rng.text;
    }

    // convert newline chars to spaces, collapse whitespace, and trim non-word chars
    return t.replace(/\r?\n/g, " ").replace(/\s+/g, " ").replace(/^\W+|\W+$/g, '');
}

// expand FF range to enclose any word partially enclosed in it
function expandtoword(range)
{
    if (range.collapsed)
    {
        return;
    }

    while (range.startOffset > 0 && range.toString()[0].match(/\w/))
    {
        range.setStart(range.startContainer, range.startOffset - 1);
    }

    while (range.endOffset < range.endContainer.length && range.toString()[range.toString().length - 1].match(/\w/))
    {
        range.setEnd(range.endContainer, range.endOffset + 1);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7809319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档