悬停复制的用户脚本

Userscript for hovercopy

下面是我的用户脚本,当鼠标悬停在 hyperlink 上并按 CTRL+C 时,它会将 HTML link 复制到剪贴板。当 <a> 是子级最多的元素时它工作正常,但我想让它获取悬停在其上的任何元素的文本并使用其最近的 <a> 父元素的 href。这是我现在拥有的代码:

// ==UserScript==
// @name        Copy hyperlink using mouse hover + Ctrl + C
// @include     *
// @grant       GM_setClipboard

// ==/UserScript==

document.addEventListener('keydown', e => {
  if (e.code === 'KeyC' && e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
    const a = document.querySelector('a:hover');
    if (a) {
        console.log(a)
        var lnkURL = a.href;
        var lnkText = a.text;
        var myLnk = '';
        myLnk = myLnk.concat("<a href='",lnkURL,"'>",lnkText,"</a>");
        GM_setClipboard(myLnk, 'html');

    }
  }
})

下面是一个失败的例子:变量“lnkText”需要是“EI-261”。我如何修改脚本以获取正确的文本?

<a one-appnavbar="" href="/lightning/r/a064/view" draggable="false">
    <span one-appnavbar="" class="slds-truncate">
            <span one-appnavbar="">
                EI-261
            </span>
    </span>
</a>

您可以拨打Element#closest()获取:

// ==UserScript==
// @name        Copy hyperlink using mouse hover + Ctrl + C
// @include     *
// @grant       GM_setClipboard

// ==/UserScript==

document.addEventListener('keydown', e => {
  if (e.code === 'KeyC' && e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
    const hovered = document.querySelector('a:hover, a *:hover');
    if (hovered) {
        const a = hovered.closest('a');
        console.log(a)
        var lnkURL = a.href;
        var lnkText = a.text;
        var myLnk = '';
        myLnk = myLnk.concat("<a href='",lnkURL,"'>",lnkText,"</a>");
        GM_setClipboard(myLnk, 'html');
    }
  }
})