悬停副本的用户脚本



下面是我的用户脚本,当鼠标悬停在超链接上并按CTRL+C时,它将把HTML链接复制到剪贴板。当<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');
}
}
})

最新更新