Копирование стилизованного текста со страницы в буфер обмена с помощью Javascript - PullRequest
0 голосов
/ 23 февраля 2011

Я создал простой инструмент, чтобы сотрудники могли персонализировать подпись электронной почты своей компании.Этот инструмент создает стилизованный текст с жирным шрифтом и немного цвета, ничего особенного.Если я затем выделю текст, скопирую и вставлю его в поле моей подписи Gmail, все будет хорошо.Сохраняет форматирование.Однако я бы предпочел дать пользователю возможность нажать кнопку «Копировать», которая копирует отформатированный контент в их буфер обмена.

В настоящее время я использую ZeroClipboard для добавления функции «копировать в буфер обмена» иэто работает отлично.Дело в том, что я не знаю, как получить этот форматированный текст.Он просто копирует неформатированную версию.Я попытался добавить слушателя mouseDown в ZeroClipboard, который выделяет текст следующим образом:

function selectText() {
    if (document.selection) {
        var range = document.body.createTextRange();
        range.moveToElementText(document.getElementById('clicktocopy'));
        range.select();
    }
    else if (window.getSelection) {
        var range = document.createRange();
        range.selectNode(document.getElementById('clicktocopy'));
        window.getSelection().addRange(range);
    }
}

Затем возвращает выделение следующим образом:

function getText() {
    if (window.getSelection) {
        var range = window.getSelection();
        return range.toString();
    }
    else {
        if (document.selection.createRange) {
            var range = document.selection.createRange();
            return range.text;
        }
    }
}

Однако это только копированиенеформатированный текст.Можно ли скопировать отформатированный текст?

Мой форматированный текст находится в div с идентификатором «results».

1 Ответ

2 голосов
/ 23 февраля 2011

Если вам нужна строка HTML, представляющая текущий выбор, следующая функция сделает это (заменив вашу функцию getText()):

function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...