4

Есть ли способ скопировать ссылку с выделенным текстом?

«Какой-то выделенный текст с этой ссылкой где-то в абзаце»

Копировать как:

«Некоторый выделенный текст с этой {ссылкой | http://example.com } где-то в абзаце»

Если есть что-то подобное, это было бы здорово помочь.

1 ответ1

2

Одним из решений может быть преобразование каждой ссылки на странице в желаемый формат. Это можно сделать с помощью Greasemonkey в Firefox и пользовательского сценария UserScript. В качестве альтернативы Tampermonkey for Chrome также может работать, но я не использую его, поэтому не могу это проверить. Недостатком этого решения будет то, что вы захотите включить его только тогда, когда это необходимо, так как если оставить его включенным для обычного просмотра веб-страниц, это приведет к искажению макета элементов страницы, таких как верхние и нижние колонтитулы и боковые панели.

Скачать Greasemonkey для Firefox ИЛИ Скачать Tampermonkey для Chrome

Следующий пользовательский код может быть сохранен в файл * .user.js (например, tmpscript.user.js), а затем этот файл можно перетащить в Firefox после установки Greasemonkey для установки пользовательского кода.

// ==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
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .