复制所选文本并以纯文本形式附加链接?

Mat*_*kle 5 browser plaintext copy-paste hyperlink

有没有办法将链接与所选文本一起复制?

“段落中某处带有此链接的某些选定文本”

要复制为:

“段落中某处带有此 { 链接 | http://example.com } 的某些选定文本”

如果有类似的东西,那将是很大的帮助。

小智 2

一种解决方案可能是将页面上的每个链接转换为所需的格式。这可以使用 Firefox 中的 Greasemonkey 和自定义用户脚本来完成。或者,Tampermonkey for Chrome 也可能有效,但我不使用它,所以我无法验证这一点。此解决方案的缺点是您只想在需要时启用它,因为在常规 Web 浏览中启用它会扭曲页面元素(例如页眉、页脚和侧边栏)的布局。

下载 Firefox 版 GreasemonkeyChrome 版 Tampermonkey

可以将以下UserScript保存到*.user.js文件中(例如:tmpscript.user.js),然后在安装Greasemonkey后将该文件拖到Firefox中来安装UserScript。

// ==UserScript==
// @name        Transform All Links
// @namespace   myscripts
// @description Transforms <a=href>link</a> to { link | <a=href>href</a> }
// @include     http*
// @version     1
// @grant       none
// ==/UserScript==
try{
    transformAnchors();
}catch(err){
    alert("error#" + err.number + " name: " + err.name + "\n"
        + "message: " + err.message + "\n"
        + "description: " + err.description);
    var errmsg = "";
    for (atr in err) {
        errmsg = errmsg + atr + " = " + err[atr] + "<br>\n";
    }
    alert(errmsg);
}

function transformAnchors() {
    //get every anchor node
    var anchornodes = document.getElementsByTagName("A");
    //transform every anchor
    for (var i=0; i<anchornodes.length; ++i){
        //grab the current anchor node
        anchornode = anchornodes[i];
        //ignore erroneous nodes with no parent
        if (anchornode.parentNode == undefined || anchornode.parentNode == null) continue;
        //add text sibling before anchor node : { <a=href>link</a>
        anchornode.parentNode.insertBefore(document.createTextNode("{ "),anchornode);
        //create styled anchor node to preserve styling
        styledanchornode = document.createElement("A");
        styledanchornode.setAttribute("class",anchornode.getAttribute("class"));
        styledanchornode.setAttribute("style",anchornode.getAttribute("style"));
        styledanchornode.setAttribute("title",anchornode.getAttribute("title"));
        //put styled anchor node before anchor node
        anchornode.parentNode.insertBefore(styledanchornode,anchornode);
        //move all anchor node children to before anchor node inside styled anchor node : { link <a=href></a>
        while (anchornode.hasChildNodes()){
            styledanchornode.appendChild(anchornode.childNodes[0]);
        }
        //remove styling from anchor node
        anchornode.removeAttribute("style");
        anchornode.removeAttribute("class");
        anchornode.removeAttribute("title");
        //add text sibling before anchor node : { link | <a=href></a>
        anchornode.parentNode.insertBefore(document.createTextNode(" | "),anchornode);
        //add href text child inside anchor node : { link | <a=href>href</a>
        anchornode.appendChild(document.createTextNode(anchornode.href));
        //add text sibling after anchor node : { link | <a=href>href</a> }
        anchornode.parentNode.insertBefore(document.createTextNode(" }"),anchornode.nextSibling);
        //increment index to compensate for extra styled anchor node
        ++i
    }
}
Run Code Online (Sandbox Code Playgroud)