在Javascript中选择的文本事件触发器

Abh*_*ari 67 javascript jquery

这可能听起来像一个新手问题,但我想知道当有人使用鼠标在页面上选择给定的文本片段时,我如何触发自定义JavaScript函数.还有什么方法可以在网页上找到所选文字的位置?

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

jAn*_*ndy 70

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

document.selection.createRange().text
Run Code Online (Sandbox Code Playgroud)

要么

window.getSelection()
Run Code Online (Sandbox Code Playgroud)

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

我不确定你对"找到位置"是什么意思,但是为了留在我的示例世界,你可以使用event propertysfor X + Y鼠标位置.

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

  • 您还应该考虑通过键盘进行选择. (4认同)
  • 当谈到键盘选择时,我看到用户释放shift:`document.addEventListener('keyup',function(e){var key = e.keyCode || e.which; if(key == 16)highlight( );}};` (4认同)
  • 有一个“文本被选择”(DOM)事件:http://www.w3schools.com/jsref/event_onselect.asp (3认同)
  • [selectionchange](https://developer.mozilla.org/en-US/docs/Web/Events/selectionchange) 事件更可取,因为 `window.getSelection()` 可能会在 `mouseup` 事件上返回旧的 `selection` 对象. (2认同)
  • @user681814 - [仅适用于表单控件,不适用于其他元素](https://html.spec.whatwg.org/multipage/indices.html#event-select)。 (2认同)

kar*_*m79 56

这是一个快速的混搭:

$('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>
Run Code Online (Sandbox Code Playgroud)

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

  • 似乎有一种普遍的想法,即`window.getSelection();`等同于IE的`document.selection.createRange().text;`.人们是否从同一个不准确的来源复制?无论如何,`window.getSelection()`返回一个`Selection`对象,而`document.selection.createRange().text;`返回一个字符串,这是一个非常不同的对象.混淆起因于`Selection`对象的`toString`方法返回所选文本,这意味着`alert(window.getSelection());`将提醒所选文本. (5认同)
  • 嘿.我之前没见过.对不起你的答案:你可能已经推断过,我之前已经在SO上纠正了几次. (2认同)
  • @Tim Down - 你没有畏缩,你实际上是正确的,并指出了正确的事情. (2认同)

Ric*_*Han 10

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

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

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

请注意,这是最前沿的,并不能保证甚至可以在主流浏览器中使用.

  • 虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接.如果链接的页面发生更改,则仅链接的答案可能会无效. - [来自评论](/ review/low-quality-posts/13804253) (2认同)

ozd*_*ozd 6

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

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

});
Run Code Online (Sandbox Code Playgroud)