2011-02-22 100 views
0

我創建了一個簡單的工具,以便員工可以個性化他們的公司電子郵件簽名。這個工具創建了一些帶粗體的字體和一些顏色的樣式文本,沒有什麼奇特的。如果我然後選擇文本並將其複製並粘貼到我的Gmail簽名字段中,那麼運行良好。它保留了格式。不過,我更願意讓用戶選擇單擊「複製」按鈕,將格式化的內容複製到剪貼板上。使用Javascript將頁面中的樣式化文本複製到剪貼板

我目前使用ZeroClipboard添加「複製到剪貼板」功能,它的工作效果很好。事情是我不知道如何抓住格式化文本。它只是不斷複製未格式化的版本。有一兩件事我想是添加一個鼠標按下監聽器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; 
     } 
    } 
} 

然而,這僅僅是複製無格式文本。是否可以複製格式化的文本?

我的格式化文本位於ID爲「results」的div中。

+0

你是如何應用的樣式?一致? – drudge 2011-02-22 22:23:31

+0

內聯,沒錯。 – 2011-02-22 22:43:18

回答

2

如果你想表示當前選擇的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; 
} 
+0

這很奇怪。我第一次運行它時,它複製了格式化文本。當我粘貼到我的電子郵件程序中時,看起來完全一樣。現在,每隔一段時間,它實際上都在複製HTML。但是沒有任何變化。不知道發生了什麼事。 – 2011-02-23 03:18:33

+0

我有一個非常類似的解決方案,但我注意到,如果您選擇粗體部分中間的文本,例如,文本不保留格式。任何想法如何也包括這些標籤呢? (注意:如果您在格式化邊界上選擇,順便自動關閉標籤。) – Erhannis 2013-09-17 19:01:27