您可以在 JavaScript 中设置和/或更改用户的文本选择吗?
在 JavaScript 中,有多种方法可以访问用户的文本选择以及创建文本选择(或范围) - 请参阅 http://www.quirksmode.org/dom/range_intro.html。
根据该页面,您可以以编程方式创建一个范围,并访问该范围内的文本。但这样做不会改变用户的文本选择,或者使用户拥有一些选定的文本(如果他们还没有)。
您可以在 JavaScript 中设置和/或更改用户的文本选择吗?
In JavaScript, there are various methods for accessing the user’s text selection, and creating text selections (or ranges) — see http://www.quirksmode.org/dom/range_intro.html.
As per that page, you can programmatically create a range, and access the text within that. But doing this doesn’t change the user’s text selection, or make the user have some selected text if they don’t already.
Can you set and/or change the user’s text selection in JavaScript?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的。在所有浏览器中,您都可以从用户的选择中获取一个或多个
Range
或TextRange
,并且Range
和TextRange 有更改范围内容的方法。
更新
您可以通过创建
Range
并将其添加到大多数浏览器中的Selection
对象以及创建TextRange 来设置用户的选择
并在 IE <= 8 中调用其select()
方法。例如,设置选择以包含元素的内容:
Selection
对象,可用于更改非 IE 中用户的选择浏览器。如果您可以更具体地说明您想要如何更改选择,那么会更容易提供帮助。Yes. In all browsers you can get one or more
Range
s or aTextRange
from the user's selection, and bothRange
andTextRange
have methods for changing the contents of the range.UPDATE
You can set the user's selection by creating a
Range
and adding it to theSelection
object in most browsers and by creating aTextRange
and calling itsselect()
method in IE <= 8.For example, to set the selection to encompass the contents of an element:
There are also several methods of the
Selection
object that can be used to change the user's selection in non-IE browsers. If you can be more specific about how you want to change the selection then it will be easier to help.2021 更新
Selection API 执行此操作。
window.getSelection()
始终返回一个Selection
,而不是创建一个new Selection()
(这看起来很直观,但不起作用)对象 - 即使用户没有突出显示任何内容!然后,您可以使用 setBaseAndExtent() 来制作特定的节点被突出显示 - 这将更改用户选择的任何内容(即使没有选择任何内容)以匹配您指定的内容。下面的示例突出显示了此 StackOverflow 页面中的问题
Update 2021
The Selection API does this. Rather than making a
new Selection()
(which seemed intuitive, but doesn't work),window.getSelection()
always returns aSelection
object - even if nothing is highlighted by the user! You can then use setBaseAndExtent() to make a particular node be highlighted - this will change whatever is selected by the user (even if nothing is selected) to match what you specify.The example below highlights the question in this StackOverflow page