关于javascript:在HTML文本框中扩展JS范围/选择

Expanding a JS range/selection in an HTML textbox

给出一个用户在其中进行选择的文本框,我希望能够使用JS扩展选择(通过单词或字符)。

我知道在某些浏览器中我可以使用window.getSelection();(请参见此处)来获取当前选择,而在FireFox中可以使用selection.modify("extend","forward","word");,IE也支持TextRange对象。

这是一项要求,因为我需要检查选择内容并将其与之前和之后的文本进行比较(因此很显然,完成后我会重置选择内容)。

我需要支持IE9(尽管也许我可以摆脱IE10),Chrome和FF,并且我拥有JQuery,但可以使用任何第三方JS库。

这篇文章很有趣,但并不是您想要的:webkit(Safari / Chrome)中的选择范围


Textareas具有自己的选择API,该API与页面内或contenteditable元素中常规选择的API不同。这很简单:一个textarea具有可读和可写的selectionStartselectionEnd属性,分别代表该textarea值内的选择开始和结束位置。 IE <= 8具有与此不同的API,但IE 9支持它。

您不会得到等价的Selection.modify(),但由于它通常很容易使用textarea的值,因此您可能根本不需要它。

MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLTextAreaElement


您可以通过以下方式更改活动选择:

1
2
3
4
var selection = window.getSelection();
var range = selection.getRangeAt(0);
range.setStart(range.startContainer, 0); // set to the beginning
selection.setSingleRange(range);

修改范围不会更新UI,您必须设置范围。