Javascript 使用Rangy选择接下来的N个单词
我可以使用Rangy选择下一个单词,如下所示:Javascript 使用Rangy选择接下来的N个单词,javascript,rangy,Javascript,Rangy,我可以使用Rangy选择下一个单词,如下所示: $(function () { $("#select-next-one-word").click(function () { var selection = rangy.getSelection(); selection.expand("word", { wordOptions: { includeTrailingSpace: true
$(function () {
$("#select-next-one-word").click(function () {
var selection = rangy.getSelection();
selection.expand("word", {
wordOptions: {
includeTrailingSpace: true
}
});
selection.collapseToEnd();
selection.expand("word");
});
});
但是如何将选择扩展到接下来的N个单词呢?这应该会给您带来正确的方向。我修改了您的“选择下两个单词”功能,如下所示:
$(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(“单词”,2)更改为您想要的任何数字。这将为您指明正确的方向。我修改了您的“选择下两个单词”功能,如下所示:
$(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
设置选择,以便屏幕上的内容反映更改
对于任意数量的单词,您只需将
范围。moveEnd(“单词”,2)
更改为您想要的任何数字。我建议从选择中获取一个范围,将其扩展为包含整个单词,将其折叠到结尾,再次向前移动整个范围两个字,然后使用moveStart()
将范围的起始点向后移动两个字。有点复杂,但达到了我所理解的预期结果
演示:
代码:
我建议从所选内容中获取一个范围,将其扩展到包含整个单词,将其折叠到末尾,再次向前移动整个范围两个单词,然后使用
moveStart()
将范围的开头向后移动两个单词。有点复杂,但达到了我所理解的预期结果
演示:
代码:
您的JSFIDLE可以很好地处理两个单词,但有什么不符合预期?例如,当光标位于“dolor”上时,单击“选择下两个单词”按钮不会选择“sit amet”。是的,它每两个单词选择一个单词,因为我想它会在第二次迭代中覆盖所选内容。当我了解了Rangy的工作原理后,我会再回来讨论。我已经阅读了Rangy的所有文档,但仍然没有任何线索。他们的文档很糟糕,我本可以用中文阅读,结果也一样。@user1835565:Rangy文档是极简主义的,并且假设Rangy所基于的domapi是知识的。我同意一些已完成的示例会有所改进。您的JSFIDLE可以很好地处理两个单词,但有什么不符合预期?例如,当光标位于“dolor”上时,单击“选择下两个单词”按钮不会选择“sit amet”。是的,它每两个单词选择一个单词,因为我猜它会在第二次迭代中覆盖所选内容。当我了解了Rangy的工作原理后,我会再回来讨论。我已经阅读了Rangy的所有文档,但仍然没有任何线索。他们的文档很糟糕,我本可以用中文阅读,结果也一样。@user1835565:Rangy文档是极简主义的,并且假设Rangy所基于的domapi是知识的。我同意一些已完成的示例会有所改进。当我在光标位于“amet”上时点击“选择下两个单词”按钮时,选择了“Concertetur adipising”。你知道我如何选择“Concertetur adipsing”(忽略“,”并包括最后一个空格)?@jpen:我想出了一个方法。但它并不十分漂亮。见更新的答案。@jpen:啊,我说得太快了。如果你把插入符号放在“concertetur”中,那么它会正确地突出显示接下来的两个单词,但下次按下按钮时会跳过“Maecenas”。我会再想一想。@jpen:我想,首先调用
expand()
,再次更新并修复了它。非常感谢您的帮助!当光标处于“ipsum”时按下“选择下一个2字”按钮时,“选择下一个”被选中。如何限制contenteditable div中的选择?当我在光标位于“amet”时点击“选择下一个两个单词”按钮时,选择了“连续编辑”。你知道我如何选择“Concertetur adipsing”(忽略“,”并包括最后一个空格)?@jpen:我想出了一个方法。但它并不十分漂亮。见更新的答案。@jpen:啊,我说得太快了。如果你把插入符号放在“concertetur”中,那么它会正确地突出显示接下来的两个单词,但下次按下按钮时会跳过“Maecenas”。我会再想一想。@jpen:我想,首先调用expand()
,再次更新并修复了它。非常感谢您的帮助!当光标处于“ipsum”时按下“选择下一个2字”按钮时,“选择下一个”被选中。如何限制contenteditable div中的选择?