使用Rangy选择下一个N个单词

时间:2014-07-31 12:05:28

标签: javascript rangy

我可以像使用Rangy一样选择下一个单词:

$(function () {
    $("#select-next-one-word").click(function () {
        var selection = rangy.getSelection();
        selection.expand("word", {
            wordOptions: {
                includeTrailingSpace: true
            }
        });

        selection.collapseToEnd();
        selection.expand("word");
    });
});

JsFiddle demo

但是如何将选择范围扩展到下一个N个字?

2 个答案:

答案 0 :(得分:2)

这会让你朝着正确的方向前进。我修改了你的“select-next-two-words”功能,如下所示:

$(function () {
    $("#select-next-two-words").click(function () {
        var selection = rangy.getSelection();

        selection.expand("word", {
            wordOptions: {
                includeTrailingSpace: true
            }
        });
        selection.collapseToEnd();
        var range = selection.getRangeAt(0);
        range.moveEnd("word", 2);
        selection.setSingleRange(range);
    });
});

我在范围上使用moveEnd来向前移动两个单词的结尾。但是,这不会修改屏幕上的选择。您必须使用setSingleRange设置选择,以便屏幕上的内容反映更改。

对于任意数量的单词,您只需将range.moveEnd("word", 2)更改为您想要的任何数字。

答案 1 :(得分:2)

我建议从选择中获取范围,将其扩展到包含整个单词,将其折叠到最后,再将两个单词向前移动整个范围,然后使用{{1}将范围的开头移回两个单词}}。根据我的理解,它有点复杂,但达到了预期的效果。

演示:http://jsfiddle.net/u4337/81/

代码:

moveStart()