如何将“select”事件附加到页面上的每个文本节点?有没有更好的办法?

时间:2009-08-06 03:12:46

标签: javascript jquery events greasemonkey

注意:似乎解决了我自己的问题。请参阅编辑。

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

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

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

有什么建议,想法吗?感谢。

编辑#1:Ken Browning指出jQuery中的select事件仅在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:如果有人好奇,我将完成的脚本发布在Userscripts上。链接在这里。享受!

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

2 个答案:

答案 0 :(得分:3)

在Firefox中,document.getSelection()将返回所选文字。

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

注意:在我写完之后,你发布了一些源代码来获取选择。虽然该代码很好(和跨浏览器),但如果您使用Greasemonkey,则必须使用Firefox,因此您只需要document.getSelection()

答案 1 :(得分:1)

  

当用户选择文本字段中的某些文本(包括输入和文本区域)时,将触发select事件。

我认为这意味着您的内容错误,除非您的网页内容位于<input type="text"><textarea>