Выберите следующие N слов, используя 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 ответа

Решение

Я бы предложил получить диапазон из выделения, расширить его, чтобы охватить целые слова, свернуть его до конца, снова переместить весь диапазон на два слова вперед, а затем переместить начало диапазона на два слова назад, используя moveStart(), Немного запутанный, но достигает желаемого результата, насколько я понимаю.

Демо: http://jsfiddle.net/u4337/81/

Код:

var selection = rangy.getSelection();
var range = selection.getRangeAt(0);

// Expand to whole words and collapse
range.expand("word", {
    wordOptions: {
        includeTrailingSpace: true
    }
});

range.collapse(false);

// Move the whole range two words ahead
range.move("word", 2);

// Move the start two words back
range.moveStart("word", -2);

// Re-select the range
selection.setSingleRange(range);

Это должно направить вас в правильном направлении. Я изменил вашу функцию "выбрать следующие два слова" следующим образом:

$(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) на любой номер, который вы хотите.

Другие вопросы по тегам