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

发布于 2024-07-29 19:14:45 字数 1601 浏览 4 评论 0原文

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

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

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

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

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

编辑#1:Ken Browning 指出 jQuery 中的 select 事件仅在文本区域和输入字段中触发。 所以我想我必须放弃它。 也许我可以稍微改变我的问题,并询问是否有人可以告诉我将选择事件绑定到所有文本节点的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

NOTE: Solved my own problem, it seems. See the edits.

I am trying to write a greasemonkey script that will highlight all the matching texts on the page when the user selects a text, and then remove the highlighting when the selection is canceled. I am looking for a jQuery way to do this. It seems like there is a select event in the jQuery core, but I couldn't get it to work they way I wanted it. Try running the following on this page for instance:

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

There is no response. So it seems that I need to attach this to text nodes in particular. But that doesn't seem practical to me. It would be way too slow.

Any suggestions, ideas? Thanks.

EDIT # 1:Ken Browning pointed out that the select event in jQuery only fires in textarea and input fields. So I guess I have to abandon that. Maybe I can change my question slightly, and ask if anyone can tell me the javascript way to bind selection events to all the text nodes.

EDIT # 2: I think I found part of my answer. This returns the selected text on the page, but you still have to click a button to show it. There is no select event binding. Hm.

<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

EDIT # 3: SO I bound to the mouseup event rather than to selection. I am then checking the value of the getSelText() to proceed further after that point. Yay!

EDIT # 4: In case anyone is curious, I posted my finished script on Userscripts. Here is the link. Enjoy!

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱,才寂寞 2024-08-05 19:14:45

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

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

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

In Firefox, document.getSelection() will return the selected text.

You could attach an onmouseup handler to the document, and check for the selection each time you receive a mouseup event.

Note: After I wrote this, you posted some source code to get the selection. While that code is fine (and cross-browser), if you’re using Greasemonkey you must be on Firefox, so all you need is document.getSelection().

凉城 2024-08-05 19:14:45

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

我读到这意味着您遇到了错误的事件,除非您的页面内容位于

The select event fires when a user selects some text in a text field, including input and textarea.

I read that to mean you've got the wrong event unless your page contents are in an <input type="text"> or a <textarea>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文