我可以在 JavaScript 中用鼠标模拟文本选择吗?
Posted
技术标签:
【中文标题】我可以在 JavaScript 中用鼠标模拟文本选择吗?【英文标题】:Can I simulate text selection with the mouse in JavaScript? 【发布时间】:2010-11-28 09:58:33 【问题描述】:我想通过模拟鼠标左键向下选择页面上的文本并将其拖动到指定的 x,y 位置(以像素为单位)
这可以用 javascript 完成吗?
【问题讨论】:
【参考方案1】:我认为使用 JavaScript 以这种方式控制鼠标是不可能的。
但是,您可以使用 JavaScript 直接选择文档的某些部分。例如:
var h3s = document.getElementsByTagName("h3");
var range = document.createRange();
range.selectNode(h3s[0]);
window.getSelection().addRange(range);
将选择第一个 h3 元素。
另请参阅:http://www.quirksmode.org/dom/range_intro.html,了解有关建筑范围的更多信息。
要选择文档的整个正文,您可以使用:
var body = document.getElementsByTagName("body")[0];
var range = document.createRange();
range.selectNode(body);
window.getSelection().addRange(range);
要选择文档中的第 4 个段落的第 3 个字符,请尝试:
var p4 = document.getElementsByTagName("p")[3].firstChild;
var range = document.createRange();
range.setStart(p4, 2);
range.setEnd(p4, 3);
window.getSelection().addRange(range);
【讨论】:
我也可以选择直到元素的中间......比如,字母#3?另外,您的示例是否能够选择一个包含各种 div、字体等的 body 元素?【参考方案2】: /** * 选择 2 个元素之间的文本。支持选择连续元素。 * @param Object element1 开始元素。 * @param Object element2 结束元素。 */ 函数 selectBetweenTwoElements(element1, element2) 如果(window.getSelection) /* 所有浏览器,除了 IE 8 和 IE 7 */ var selection = window.getSelection(); selection.removeAllRanges(); var range = document.createRange(); range.setStart(element1, 0); range.setEnd(element2, 1); 选择.addRange(范围); 别的 /* 在 IE 8 / IE 7 中运行良好 */ 如果(document.body.createControlRange) var range1 = document.body.createTextRange(); range1.moveToElementText(element1); var range2 = document.body.createTextRange(); range2.moveToElementText(element2); var range = document.body.createTextRange(); range.setEndPoint("StartToStart", range1); range.setEndPoint("EndToEnd", range2); range.select();【讨论】:
【参考方案3】:据我所知,这是做不到的。您可以选择的唯一文本是表单元素(文本区域、输入文本等)
【讨论】:
以上是关于我可以在 JavaScript 中用鼠标模拟文本选择吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 在 getSelection() 中查找所选文本的索引?
Javascript中,当鼠标点击选中某个文本输入框时,该文本框可以响应啥事件