Javascript:如何检测单词是否突出显示

51 javascript events highlight detect

我正在编写一个Firefox插件,只要突出显示一个单词就会触发它.但是我需要一个脚本来检测单词突出显示的时间,然后我就卡住了.一个例子是nytimes.com(当你正在阅读一篇文章并突出显示一个单词时,会弹出参考图标).然而,nytimes.com脚本非常复杂.我16岁,而不是程序员,所以这绝对是我的联盟.

Tim*_*own 73

要做到这一点最简单的方法是检测mouseupkeyup对文档的事件,并检查所有文本是否被选中.以下内容适用于所有主流浏览器.

示例:http://www.jsfiddle.net/timdown/SW54T/

function getSelectedText() {
    var text = "";
    if (typeof window.getSelection != "undefined") {
        text = window.getSelection().toString();
    } else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
        text = document.selection.createRange().text;
    }
    return text;
}

function doSomethingWithSelectedText() {
    var selectedText = getSelectedText();
    if (selectedText) {
        alert("Got selected text " + selectedText);
    }
}

document.onmouseup = doSomethingWithSelectedText;
document.onkeyup = doSomethingWithSelectedText;
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果要检测是否选择了特定单词,该怎么办?假设您在页面上有多次"foo"并且用户选择"foo",您如何知道用户选择了哪些单词? (2认同)

Tom*_*len 6

这是一个脚本:

<script>
function getSelText()
{
    var txt = '';
    if (window.getSelection)
    {
        txt = window.getSelection();
    }
    else if (document.getSelection)
    {
        txt = document.getSelection();
    }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
    }
    else return;
document.aform.selectedtext.value = txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name="aform">
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>
Run Code Online (Sandbox Code Playgroud)

代码蟾蜍提供:

http://www.codetoad.com/javascript_get_selected_text.asp

在您的情况下,您希望在进行选择时调用此脚本,然后您可以根据需要处理它,例如使用 AJAX 请求获取相关信息,就像 NYtimes 可能做的那样。

  • 我一直在 SO 上看到这段代码,这是错误的:`window.getSelection()` 返回一个 `Selection` 对象,而不是一个字符串。 (6认同)
  • @tim down 不是全部真相。该对象有一个 toString() 方法。当需要一个字符串时,将返回一个字符串,否则,正如您指出的那样,将返回一个对象。https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection (2认同)