[英]Is it possible to select text from multiple elements?
使用 java 脚本,您可以进行选择。 这相当于用鼠标选择 cursor。我添加到问题中的代码选择了您单击的容器内的每个元素,但之前的选择消失了。 这可以改变吗?
const selectElement = (element) => { const range = document.createRange(); range.selectNode(element); const selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); } const container = document.getElementById("container"); container.addEventListener('click', (event) => { const x = event.pageX; const y = event.pageY; selectElement(document.elementFromPoint(x, y)); });
<!DOCTYPE html> <html lang="en"> <head> <title>Code snippet</title> </head> <body> <div id="container"> <div id="firstElement"> First element text </div> <div id="secondElement"> Second element text </div> </div> </body> </html>
编辑:为了更好地理解,我添加了第二个代码段来执行我想要的操作,但没有使用window.getSelection().addRange()
。
const selectElement = (element) => { element.style.backgroundColor = 'blue'; element.style.color = 'white'; } const container = document.getElementById("container"); container.addEventListener('click', (event) => { const x = event.pageX; const y = event.pageY; selectElement(document.elementFromPoint(x, y)); });
<!DOCTYPE html> <html lang="en"> <head> <title>Code snippet</title> </head> <body> <div id="container"> <div id="firstElement"> First element text </div> <div id="secondElement"> Second element text </div> </div> </body> </html>
根据非常标准的 UI 选择行为,移动焦点和/或单击元素通常(总是?)删除先前的选择。
如果您想保留以前的选择范围,则需要单独存储它们并将它们重新添加到窗口的选择范围中。
显然,这与任何用户的期望都背道而驰,但我不会假设你为什么想要这个:)
var ranges = []; const selectElement = (element) => { const range = document.createRange(); range.selectNode(element); ranges.push(range); const selection = window.getSelection(); ranges.forEach(r => selection.addRange(r)); } const container = document.getElementById("container"); container.addEventListener('click', (event) => { selectElement(event.target); });
<!DOCTYPE html> <html lang="en"> <head> <title>Code snippet</title> </head> <body> <div id="container"> <div id="firstElement"> First element text </div> <div id="secondElement"> Second element text </div> </div> </body> </html>
请注意,如果您在容器 div 外部单击,则会清除选择 - 这是标准行为,并且由于您的事件侦听器仅在 div 上,因此不会恢复选择。 如果您想更改它,请将您的事件侦听器移动到正文。
这只能在 FireFox 浏览器中完成。
查看 MDN Web 文档上的Selection.addRange()
页面。
您将看到一条注释:
注意:目前只有 Firefox 支持多个选择范围,如果已经包含一个,其他浏览器将不会向选择添加新范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.