当有人使用鼠标在页面上选择给定的文本片段时,如何触发JavaScript函数?
另外,有什么方法可以找到所选文本在页面上的位置吗?
更新:更清楚地说,文本片段可以是句子或单词或短语的一部分,也可以是整个段落。
Answers:
没有“选择了文本”(DOM)事件,但是您可以将mouseup事件绑定到document.body。在该事件处理程序中,您可能只需检查
document.selection.createRange().text
要么
window.getSelection()
方法。关于Stackoverflow,有几个主题,例如使用此javascript获取网页中选定文本的段落。
我不确定“寻找位置”是什么意思,但是要留在我的示例世界中,您可以使用event propertysX + Y鼠标位置。
document.addEventListener('keyup', function(e) { var key = e.keyCode || e.which; if (key == 16) highlight(); });
这是一个快速混搭:
$('div').mouseup(function() {
var text=getSelectedText();
if (text!='') alert(text);
});
function getSelectedText() {
if (window.getSelection) {
return window.getSelection().toString();
} else if (document.selection) {
return document.selection.createRange().text;
}
return '';
}
<div>Here is some text</div>
window.getSelection();与IE相当的普遍想法document.selection.createRange().text;。人们是从相同的,不准确的来源复制吗?无论如何,window.getSelection()返回一个Selection对象而document.selection.createRange().text;返回一个字符串,这是一个非常不同的对象。混淆源于以下事实:对象的toString方法Selection返回选定的文本,这意味着alert(window.getSelection());将警告选定的文本。
有一个新的实验性API可以处理此问题:
修改文档的选择对象或与<input>或关联的选择<textarea>发生更改时,将触发Selection API的selectionchange事件。在第一种情况下,在文档上触发selectionchange事件,在第二种情况下,在元素上触发selectionchange事件。
https://developer.mozilla.org/zh-CN/docs/Web/Events/selectionchange
请注意,这是最前沿的,即使在主要的浏览器中也不能保证能正常工作。
var selectedText = "";
if (window.getSelection) {
selectedText = window.getSelection();
}
if (document.getSelection) {
selectedText = document.getSelection();
}
if (document.selection) {
selectedText = document.selection.createRange().text;
}
function textSelector() {
alert(selectedText);
}
textSelector();