【问题标题】:Copying styled text from a page to the clipboard with Javascript使用Javascript将样式文本从页面复制到剪贴板
【发布时间】:2011-02-23 09:05:24
【问题描述】:

我创建了一个简单的工具,让员工可以个性化他们的公司电子邮件签名。这个工具创建了一些带有一些粗体字体和一些颜色的样式文本,没有什么花哨的。如果我然后选择文本并将其复制并粘贴到我的 Gmail 签名字段中,那么一切正常。它保留格式。但是,我更愿意让用户选择单击“复制”按钮,将格式化的内容复制到他们的剪贴板上。

我目前正在使用 ZeroClipboard 添加“复制到剪贴板”功能,效果很好。问题是我不知道如何获取格式化的文本。它只是不断复制未格式化的版本。我尝试的一件事是向 ZeroClipboard 添加一个 mouseDown 侦听器,它可以像这样选择文本:

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;
        }
    }
}

但是,这只是复制未格式化的文本。是否可以复制格式化的文本?

我的格式化文本位于 id 为“results”的 div 中。

【问题讨论】:

  • 你是如何应用这些样式的?内联?

标签: javascript html mootools


【解决方案1】:

如果您想要一个表示当前选择的 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;
}

【讨论】:

  • 这很奇怪。我第一次运行它时,它复制了格式化的文本。当我粘贴到我的电子邮件程序中时,它看起来完全一样。现在,以及每隔一段时间,它实际上是在复制 HTML。不过,什么都没有改变。不知道发生了什么。
  • 我有一个非常相似的解决方案,但我注意到,例如,如果您选择粗体部分中间的文本,则文本不会保留格式。知道如何包含这些标签吗? (旁注:如果您选择跨格式边界,它会自动关闭标签,顺便说一句。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多