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

IT技术 javascript jquery
2021-01-22 10:02:31

当有人使用鼠标选择页面上的给定文本片段时,如何触发 JavaScript 函数
另外,有什么办法可以在页面上找到所选文本的位置吗?

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

6个回答

没有“选择文本(DOM)事件,但您可以将mouseup事件绑定document.body. 在该事件处理程序中,您可能只需检查

document.selection.createRange().text

或者

window.getSelection()

方法。Stackoverflow 上有几个主题,比如这个javascript 来获取网页中选定文本的段落

我不确定“找到位置”是什么意思,但是为了留在我的示例世界中,您可以使用event propertysfor X+Y 鼠标位置。

示例:http : //www.jsfiddle.net/2C6fB/1/

有一个“文本被选择”(DOM)事件:w3schools.com/jsref/event_onselect.asp
2021-03-23 10:02:31
2021-03-30 10:02:31
您还应该考虑通过键盘进行选择。
2021-04-01 10:02:31
selectionchange事件是可取的,因为window.getSelection()可能返回老selection的对象mouseup的事件。
2021-04-04 10:02:31
在键盘选择方面,我观察了用户释放 shift: document.addEventListener('keyup', function(e) { var key = e.keyCode || e.which; if (key == 16) highlight(); });
2021-04-09 10:02:31

这是一个快速混搭:

$('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>

演示:http : //jsfiddle.net/FvnPS/11/

固定的。mozilla 文档说:“这使得选择对象看起来像一个字符串,当它实际上是一个具有自己的属性和方法的对象时。具体来说,调用 Selection 对象的 toString() 方法的返回值被传递。” :) developer.mozilla.org/en/window.getSelection
2021-03-22 10:02:31
呵呵。我以前没见过。很抱歉对您的回答发牢骚:正如您所推断的那样,我之前已经在 SO 上纠正了几次。
2021-03-28 10:02:31
似乎有一个普遍的想法window.getSelection();相当于 IE 的document.selection.createRange().text;. 人们是否从相同的、不准确的来源复制?无论如何,window.getSelection()返回一个Selection对象而document.selection.createRange().text;返回一个字符串,这是一个非常不同的对象。混淆是因为objecttoString方法Selection返回选定的文本,这意味着alert(window.getSelection());将警告选定的文本。
2021-03-30 10:02:31
@Tim Down - 你没有在swing不定,你实际上是正确的,并且指出了这一点是正确的。
2021-04-05 10:02:31

有一个新的实验性 API 可以解决这个问题:

当文档的选择对象被修改时,或者当与 an<input>或 a关联的选择<textarea>发生变化时,会触发 Selection API 的 selectionchange 事件selectionchange 事件在第一种情况下在文档上触发,在第二种情况下在元素上触发。

https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange

请注意,这是最前沿的,并且不能保证即使在主要浏览器上也能正常工作。

我修改了答案
2021-03-20 10:02:31
最新的标准还缺少一个基本的“可选”属性;因此仍然需要供应商前缀,因为每个浏览器都以不同的方式实现它。同样,自 v1 以来,它已经在 ActionScript 中存在了 2 年:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/...
2021-03-20 10:02:31
值得注意的是,虽然这仍处于试验阶段,但在发表此评论时,每个主要浏览器都实现了这一点,这将适用于 96.7% 的网络用户。caniuse.com/?search=selectionchange
2021-03-20 10:02:31
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会无效。-来自评论
2021-03-22 10:02:31

我不确定鼠标的事情,但这条线适用于移动设备,每次对文本选择进行更改时都会调用 -

document.addEventListener('selectionchange', () => {

});

AFAIK,没有您描述的此类事件。但是您可以模拟该功能。

这里查看代码和演示。

谢谢 ShiVik,它真的很有帮助。此仿真是否具有浏览器依赖性?
2021-04-02 10:02:31
@abhishiktiwari - AFAIU 博客 - 无
2021-04-07 10:02:31