2

注意:似乎解决了我自己的问题。查看编辑。

我正在尝试编写一个greasemonkey脚本,当用户选择文本时,它将突出显示页面上的所有匹配文本,然后在取消选择时删除突出显示。我正在寻找一种 jQuery 方法来做到这一点。似乎 jQuery 核心中有一个 select 事件,但我无法让它按照我想要的方式工作。例如,尝试在此页面上运行以下命令:

$(document).select(function () { 
      console.log("hey");
  });

没有回应。因此,我似乎特别需要将其附加到文本节点。但这对我来说似乎不切实际。这太慢了。

有什么建议、想法吗?谢谢。

编辑#1:Ken Browning 指出 jQuery 中的选择事件仅在 textarea 和输入字段中触发。所以我想我必须放弃它。也许我可以稍微改变一下我的问题,并询问是否有人可以告诉我将选择事件绑定到所有文本节点的 javascript 方式。

编辑#2:我想我找到了部分答案。这将返回页面上选定的文本,但您仍然必须单击一个按钮才能显示它。没有选择事件绑定。嗯。

<script language=javascript>
function getSelText()
{
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {//javascript select event
        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()"> 

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

编辑#3:所以我绑定到 mouseup 事件而不是选择。然后,我正在检查 getSelText() 的值,以便在该点之后继续进行。耶!

编辑#4:如果有人好奇,我将完成的脚本发布在用户脚本上。链接在这里。享受!

http://userscripts.org/scripts/show/55148

4

2 回答 2

3

在 Firefox 中,document.getSelection()将返回选定的文本。

您可以将onmouseup处理程序附加到document, 并在每次收到mouseup事件时检查选择。

注意:在我写完这篇文章之后,你发布了一些源代码来获得选择。虽然该代码很好(并且可以跨浏览器),但如果您使用的是 Greasemonkey,您必须在 Firefox 上,所以您只需要document.getSelection().

于 2009-08-06T03:35:15.733 回答
1

当用户在文本字段中选择一些文本时触发 select 事件,包括 input 和 textarea。

我读到这意味着你得到了错误的事件,除非你的页面内容在一个<input type="text">或一个<textarea>

于 2009-08-06T03:15:54.360 回答