2017-08-10 33 views
5
<p id="p1"> 
...here is a lot of text (html) mixed with php... 
</p> 
<button onclick="copyToClipboard('#p1')">Copy to clipboard</button> 
------ 
JS 

function copyToClipboard(element) { 
    var $temp = $("<input>"); 
    $("body").append($temp); 
    $temp.val($(element).text()).select(); 
    document.execCommand("copy"); 
    $temp.remove(); 
} 

Po kliknięciu na przycisk, ale wyniki są kopiowane bez pogrubienie, podkreślenie, wiersze i inne rzeczy formatowania. Jak mogę go skopiować, ponieważ jest wyświetlany domyślnie?Na click - kopiowanie do schowka

+0

Myślę, że to pomogłoby, gdybyś opisał, gdzie zostanie wklejony. Jeśli weźmiesz cały HTML, może nie wkleić go tak, jak chcesz. – Brian

+0

Do wiadomości treści gmail. Po prostu chcę, aby kopiować "kliknij, aby skopiować" tak samo jak przy zaznaczaniu tekstu myszą i kopiowaniu. – FabianCannes

+0

Widzę, jak to byłoby przydatne. Dobre pytanie. +1. – Brian

Odpowiedz

2

Zakładając wszystkie style są inline, trzeba dostać html elementu zamiast tekstu. Coś jak:

function copyToClipboard(element) { 
    var $temp = $("<input>"); 
    $("body").append($temp); 
    $temp.val($(element).html()).select(); //Note the use of html() rather than text() 
    document.execCommand("copy"); 
    $temp.remove(); 
} 

Edytuj na podstawie opinii:

Aby skopiować formatowanie do czegoś w rodzaju treści wiadomości Gmail lub dokumentu programu Word trzeba rzeczywiście wybrać element w postaci zakresu. Po wstawieniu treści HTML do textarea faktycznie kopiujesz nieprzetworzony tekst. Chcesz zrobić coś takiego:

function copyToClipboard(element) { //Note, element should be a node rather than a jQuery instance. 
    var selection = window.getSelection(), //Get the window selection 
     selectData = document.createRange(); //Create a range 

     selection.removeAllRanges(); //Clear any currently selected text. 
     selectData.selectNodeContents(element); //Add the desired element to the range you want to select. 
     selection.addRange(selectData); //Highlight the element (this is the same as dragging your cursor over an element) 
     var copyResult = document.execCommand("copy"); //Execute the copy. 

     if(copyResult) //was the copy successful? 
      selection.removeAllRanges(); //Clear the highlight. 
     else 
      alert("Your browser does not support clipboard commands, press ctrl+c"); 
} 
+0

Ta metoda powoduje skopiowanie całego kodu źródłowego html, który nie jest wyświetlany w formie sformatowanej. – FabianCannes

+0

Gdzie próbujesz go wkleić? – GentlemanMax

+0

Do treści wiadomości w Gmailu. – FabianCannes

0

Spróbuj html() zamiast tekstu()

$temp.val($(element).html()).select(); 
+0

Umysł wyjaśniający coś więcej? –

1

function copyToClipboard(element) { 
 
    var $temp = $("<input>"); 
 
    $("body").append($temp); 
 
    $temp.val($(element).html()).select(); 
 
    document.execCommand("copy"); 
 
    $temp.remove(); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p id="p1"> 
 
...here is a lot of <b>text</b> (html) mixed with php... 
 
</p> 
 
<button onclick="copyToClipboard('#p1')">Copy to clipboard</button>