Javascript中的选定文本事件触发器

Javascript中的选定文本事件触发器,javascript,jquery,Javascript,Jquery,当有人使用鼠标在页面上选择给定的文本片段时,如何触发JavaScript函数 另外,是否有任何方法找到所选文本在页面上的位置 更新: 更清楚地说,文本片段可以是句子、单词、短语的一部分,也可以是整个段落。没有“text was selected”(DOM)事件,但您可以将mouseup事件绑定到document.body。在该事件处理程序中,您可以只检查 document.selection.createRange().text 或 方法。有几个关于Stackoverflow的主题,比如这个

当有人使用鼠标在页面上选择给定的文本片段时,如何触发JavaScript函数 另外,是否有任何方法找到所选文本在页面上的位置

更新: 更清楚地说,文本片段可以是句子、单词、短语的一部分,也可以是整个段落。

没有“text was selected”
(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