Выберите следующие 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");
});
});
Но как я могу расширить выбор до следующих 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)
на любой номер, который вы хотите.