Javascript中的选定文本事件触发器
当有人使用鼠标在页面上选择给定的文本片段时,如何触发JavaScript函数 另外,是否有任何方法找到所选文本在页面上的位置 更新: 更清楚地说,文本片段可以是句子、单词、短语的一部分,也可以是整个段落。没有“text was selected”Javascript中的选定文本事件触发器,javascript,jquery,Javascript,Jquery,当有人使用鼠标在页面上选择给定的文本片段时,如何触发JavaScript函数 另外,是否有任何方法找到所选文本在页面上的位置 更新: 更清楚地说,文本片段可以是句子、单词、短语的一部分,也可以是整个段落。没有“text was selected”(DOM)事件,但您可以将mouseup事件绑定到document.body。在该事件处理程序中,您可以只检查 document.selection.createRange().text 或 方法。有几个关于Stackoverflow的主题,比如这个
(DOM)
事件,但您可以将mouseup
事件绑定到document.body
。在该事件处理程序中,您可以只检查
document.selection.createRange().text
或
方法。有几个关于Stackoverflow的主题,比如这个
我不确定“查找位置”是什么意思,但要停留在我的示例世界中,您可以使用事件属性来设置X+Y鼠标位置
示例:这里是一个快速mashup:
$('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>
$('div').mouseup(函数(){
var text=getSelectedText();
如果(文本!='')警报(文本);
});
函数getSelectedText(){
if(window.getSelection){
返回窗口.getSelection().toString();
}else if(文档选择){
return document.selection.createRange().text;
}
返回“”;
}
这里有一些文字
演示:好的,没有您描述的此类事件。但您可以模拟该功能
查看代码和演示。有一个新的实验API处理此问题:
当文档的选择对象被修改时,或者当与
或
关联的选择发生更改时,将触发选择API的selectionchange事件。selectionchange事件在第一种情况下对文档激发,在第二种情况下对元素激发
请注意,这是最前沿的,即使在主要浏览器中也不能保证工作。存在“选择文本”事件。但仅限于我所知道的文本区
<textarea onselect="message()" name="summary" cols="60" rows="5">
请写入个人简介,不少于200字!
</textarea>
请写入个人简介,不少于200字!
我不确定鼠标的功能,但这行代码适用于移动设备,每次更改文本选择时都会调用它-
document.addEventListener('selectionchange', () => {
});
按下鼠标按钮时,将触发mousedown
事件;松开鼠标按钮时,将触发mouseup
然后单击事件
因此,我们监听mouseup
事件,检查是否选择了任何文本,并执行相应的操作
const p = document.getElementById('interactiveText');
p.addEventListener('mouseup', (e) => {
const selection = window.getSelection().toString();
if (selection === '') {
console.log('click');
} else {
console.log('selection', selection);
}
});
有一个快捷方式可以从事件对象获取所选文本
event.currentTarget[event.currentTarget.selectedIndex].text
谢谢安迪,Ya,我认为最好的是X+Y鼠标位置。你也应该考虑通过键盘选择。有一个“文本被选中”(DOM)事件:当涉及到键盘选择时,我观察到用户释放移位:<代码>文档。AdvEntDistListNER(Key Up),函数(E){var键=E.Key Cal码>E.;IF(key=16)突出显示();})代码>事件更可取,因为window.getSelection()
可能会在mouseup
事件上返回旧的selection
对象。谢谢ShiVik,这非常有用。这个仿真是否依赖于浏览器?@abhiktiwari-AFAIU the blog-none似乎有一个普遍的想法,window.getSelection()代码>相当于IE的document.selection.createRange().text代码>。人们是否从同一个不准确的来源复制?无论如何,window.getSelection()
返回一个Selection
对象,而document.Selection.createRange().text代码>返回一个字符串,它是一个非常不同的对象。混淆的原因是Selection
对象的toString
方法返回所选文本,这意味着alert(window.getSelection())代码>将提醒所选文本。已修复。mozilla文档说:“这使得selection对象看起来像一个字符串,而实际上它是一个具有自己属性和方法的对象。具体来说,调用selection对象的toString()方法的返回值被传递。”:)嘿。我以前没见过。很抱歉抱怨你的答案:正如你可能已经推断的那样,我之前已经更正了几次。@Tim Down-你没有发疯,事实上你是正确的,指出这一点是正确的。虽然这个链接可以回答这个问题,但最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我修改了应答器,最新标准也缺少一个基本的“可选”属性;因此,由于每个浏览器的实现方式不同,仍然需要供应商前缀。同样,这在ActionScript中已经存在了20年,自v1:
const p = document.getElementById('interactiveText');
p.addEventListener('mouseup', (e) => {
const selection = window.getSelection().toString();
if (selection === '') {
console.log('click');
} else {
console.log('selection', selection);
}
});
event.currentTarget[event.currentTarget.selectedIndex].text