您能否设置和/或更改用户’;JavaScript中的文本选择?

您能否设置和/或更改用户’;JavaScript中的文本选择?,javascript,textselection,Javascript,Textselection,在JavaScript中,有多种方法可用于访问用户的文本选择和创建文本选择(或范围)-请参阅 根据该页面,您可以通过编程方式创建一个范围,并访问该范围内的文本。但这样做并不会改变用户的文本选择,也不会让用户拥有一些已选择的文本(如果他们还没有) 您可以在JavaScript中设置和/或更改用户的文本选择吗?是。在所有浏览器中,您都可以从用户的选择中获得一个或多个Ranges或TextRange,并且Range和TextRange都有更改范围内容的方法 更新 您可以通过在大多数浏览器中创建范围并将

在JavaScript中,有多种方法可用于访问用户的文本选择和创建文本选择(或范围)-请参阅

根据该页面,您可以通过编程方式创建一个范围,并访问该范围内的文本。但这样做并不会改变用户的文本选择,也不会让用户拥有一些已选择的文本(如果他们还没有)


您可以在JavaScript中设置和/或更改用户的文本选择吗?

是。在所有浏览器中,您都可以从用户的选择中获得一个或多个
Range
s或
TextRange
,并且
Range
TextRange
都有更改范围内容的方法

更新

您可以通过在大多数浏览器中创建
范围并将其添加到
选择
对象,以及在IE Update 2021中创建
文本范围并调用其
选择()方法来设置用户的选择
政府是这样做的。与其做一个
新选择()
(看起来很直观,但不起作用),
window.getSelection()
总是返回一个
选择
对象-即使用户没有突出显示任何内容!然后,您可以使用使特定节点高亮显示-这将更改用户选择的任何内容(即使未选择任何内容)以匹配您指定的内容

下面的示例突出显示了此StackOverflow页面中的问题

const selection = window.getSelection()
const headerElement = document.querySelector('#question-header a')
selection.setBaseAndExtent(headerElement,0,headerElement,1)

啊,是的,对不起,我没有很好地表达这个问题-我实际上是想在用户还没有文本选择时设置用户的文本选择。是否可以同时选择不同的范围。我希望能够选择不连续文本的多个部分。@Techsin:是的,但只在Firefox中。为每个要选择的范围调用
addRange()
。@TimDown:如果您也可以在此处添加非IE方法,这将非常有用。请注意
range.selectNodeContents(el)
可能会导致
范围的意外值。endOffset
/
选择。如果
el
不是纯文本元素,则focusOffset
。例如,传递
span
最有可能导致
endOffset=1
,而传递span的
文本
子项将导致正确的偏移。有关详细信息,请参阅。您的意思是希望页面中的某些文本突然显示为选中状态?蓝色高光和一切?@Shadow:是的,就是这样。看起来不错,虽然
window.getSelection
在你仍然需要支持IE 8的情况下不起作用。而且它是2021 bro.@PaulD.Waite说到2021-IE8?我打赌有人仍然在使用它。除非你需要支持IE的任何版本,包括11,否则这很好。自2010年我的答案以来,唯一相关的变化是对
setBaseAndExtent()
的更广泛的浏览器支持,它最初只是作为WebKit,但从未在IE中实现。我的答案中更迂回的方法是创建一个范围并选择它在IE>=9中工作。
const selection = window.getSelection()
const headerElement = document.querySelector('#question-header a')
selection.setBaseAndExtent(headerElement,0,headerElement,1)