Fare clic sul pulsante Copia negli Appunti utilizzando jQuery


434

Come copio il testo all'interno di un div negli Appunti? Ho un div e ho bisogno di aggiungere un link che aggiungerà il testo negli Appunti. C'è una soluzione per questo?

<p class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>

<a class="copy-text">copy Text</a>

Dopo aver fatto clic su Copia testo, quindi premo Ctrl+ V, è necessario incollarlo.



Trello ha un modo intelligente per farlo senza flash: stackoverflow.com/questions/17527870/…
Paul Schreiber,

Fare riferimento a questo, stackoverflow.com/questions/22581345/… ha ottenuto la soluzione prevista utilizzando Pure JavaScript
Vignesh Chinnaiyan

@MichaelScheper - alcuni utenti sono persino abbastanza intelligenti da notare che il mio commento, e la maggior parte delle risposte qui, sono stati pubblicati più di quattro anni fa, quando zeroclipboard, che si basa su una piccola app flash, era l'unica opzione praticabile su più browser per lavora con gli appunti e vai alla soluzione. Oggi tutti i browser moderni lo supportano in modo nativo, quindi non è più un problema, ma non era così nel 2014
adeneo,

@adeneo: Certo, ma non tutti gli utenti sono così "intelligenti" e il tuo commento ha ancora due voti.
Michael Scheper,

Risposte:


484

Modifica a partire dal 2016

A partire dal 2016, ora è possibile copiare il testo negli Appunti nella maggior parte dei browser poiché la maggior parte dei browser ha la possibilità di copiare a livello di codice una selezione di testo negli Appunti utilizzando document.execCommand("copy") una selezione.

Come per alcune altre azioni in un browser (come l'apertura di una nuova finestra), la copia negli Appunti può essere eseguita solo tramite un'azione specifica dell'utente (come un clic del mouse). Ad esempio, non può essere eseguito tramite un timer.

Ecco un esempio di codice:

document.getElementById("copyButton").addEventListener("click", function() {
    copyToClipboard(document.getElementById("copyTarget"));
});

function copyToClipboard(elem) {
	  // create hidden text element, if it doesn't already exist
    var targetId = "_hiddenCopyText_";
    var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
    var origSelectionStart, origSelectionEnd;
    if (isInput) {
        // can just use the original source element for the selection and copy
        target = elem;
        origSelectionStart = elem.selectionStart;
        origSelectionEnd = elem.selectionEnd;
    } else {
        // must use a temporary form element for the selection and copy
        target = document.getElementById(targetId);
        if (!target) {
            var target = document.createElement("textarea");
            target.style.position = "absolute";
            target.style.left = "-9999px";
            target.style.top = "0";
            target.id = targetId;
            document.body.appendChild(target);
        }
        target.textContent = elem.textContent;
    }
    // select the content
    var currentFocus = document.activeElement;
    target.focus();
    target.setSelectionRange(0, target.value.length);
    
    // copy the selection
    var succeed;
    try {
    	  succeed = document.execCommand("copy");
    } catch(e) {
        succeed = false;
    }
    // restore original focus
    if (currentFocus && typeof currentFocus.focus === "function") {
        currentFocus.focus();
    }
    
    if (isInput) {
        // restore prior selection
        elem.setSelectionRange(origSelectionStart, origSelectionEnd);
    } else {
        // clear temporary content
        target.textContent = "";
    }
    return succeed;
}
input {
  width: 400px;
}
<input type="text" id="copyTarget" value="Text to Copy"> <button id="copyButton">Copy</button><br><br>
<input type="text" placeholder="Click here and press Ctrl-V to see clipboard contents">


Ecco una demo un po 'più avanzata: https://jsfiddle.net/jfriend00/v9g1x0o6/

E puoi anche ottenere una libreria pre-costruita che lo fa per te con clipboard.js .


Parte vecchia e storica della risposta

La copia diretta negli Appunti tramite JavaScript non è consentita da nessun browser moderno per motivi di sicurezza. La soluzione più comune consiste nell'utilizzare una funzionalità Flash per la copia negli Appunti che può essere attivata solo con un clic diretto dell'utente.

Come già accennato, ZeroClipboard è un popolare set di codice per la gestione dell'oggetto Flash per eseguire la copia. L'ho usato. Se Flash è installato sul dispositivo di navigazione (che esclude dispositivi mobili o tablet), funziona.


La soluzione alternativa più comune successiva consiste nel posizionare il testo associato agli Appunti in un campo di input, spostare lo stato attivo su quel campo e consigliare all'utente di premere Ctrl+C per copiare il testo.

Altre discussioni sul problema e possibili soluzioni alternative sono disponibili in questi post precedenti di Stack Overflow:


Queste domande che richiedono un'alternativa moderna all'utilizzo di Flash hanno ricevuto molti voti positivi e nessuna risposta con una soluzione (probabilmente perché nessuna esiste):


Internet Explorer e Firefox erano soliti disporre di API non standard per l'accesso agli Appunti, ma le loro versioni più moderne hanno deprecato questi metodi (probabilmente per motivi di sicurezza).


C'è uno sforzo nascente di standard per cercare di trovare un modo "sicuro" per risolvere i problemi più comuni negli Appunti (probabilmente richiedono un'azione specifica dell'utente come richiede la soluzione Flash) e sembra che possa essere parzialmente implementato nell'ultimo versioni di Firefox e Chrome, ma non l'ho ancora confermato.


1
clipboard.js è stato appena aggiunto a questo post modificato. È una buona utilità che ho incluso come risposta a questa domanda nell'agosto 2015.
un programmatore il

1
@acoder - Il supporto degli Appunti è cambiato regolarmente. Ad esempio, Firefox solo di recente (fine 2015) è stato abilitato document.execCommand("copy")in circostanze sufficienti per fare affidamento sul suo utilizzo. Quindi, mi sto sforzando di mantenere aggiornata la mia risposta (che è stata originariamente creata quasi 2 anni fa). Non abbiamo ancora una soluzione affidabile per Safari oltre a preselezionare il testo e dire all'utente di premere manualmente Ctrl + C, ma almeno progressi sono stati fatti altrove.
jfriend00,

1
Ecco un link per il supporto per le API degli Appunti: caniuse.com/#feat=clipboard
L84

2
Cordiali saluti, secondo questo set di note sulla versione di Safari , sembra che Safari 10 ora supporti document.execCommand("copy")quindi questo codice dovrebbe ora funzionare in Safari 10.
jfriend00

1
@sebastiangodelet - dominio pubblico.
jfriend00

641

Aggiornamento 2020 : questa soluzione utilizza execCommand. Mentre quella funzionalità andava bene al momento di scrivere questa risposta, ora è considerata obsoleta . Funzionerà ancora su molti browser, ma il suo utilizzo è sconsigliato in quanto il supporto potrebbe essere interrotto.

Esiste un altro modo non Flash (a parte l' API degli Appunti menzionata nella risposta di jfriend00 ). È necessario selezionare il testo e quindi eseguire il comandocopy per copiare negli appunti qualunque testo sia attualmente selezionato sulla pagina.

Ad esempio, questa funzione copierà il contenuto dell'elemento passato negli appunti (aggiornato con suggerimenti nei commenti da PointZeroTwo ):

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

Ecco come funziona:

  1. Crea un campo di testo temporaneamente nascosto.
  2. Copia il contenuto dell'elemento in quel campo di testo.
  3. Seleziona il contenuto del campo di testo.
  4. Esegue la copia del comando come: document.execCommand("copy") .
  5. Rimuove il campo di testo temporaneo.

Puoi vedere una breve demo qui:

function copyToClipboard(element) {
  var $temp = $("<input>");
  $("body").append($temp);
  $temp.val($(element).text()).select();
  document.execCommand("copy");
  $temp.remove();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p id="p1">P1: I am paragraph 1</p>
<p id="p2">P2: I am a second paragraph</p>
<button onclick="copyToClipboard('#p1')">Copy P1</button>
<button onclick="copyToClipboard('#p2')">Copy P2</button>
<br/><br/><input type="text" placeholder="Paste here for test" />

Il problema principale è che al momento non tutti i browser supportano questa funzione, ma puoi usarla su quelle principali da:

  • Chrome 43
  • Internet Explorer 10
  • Firefox 41
  • Safari 10

Aggiornamento 1: questo può essere ottenuto anche con una soluzione JavaScript pura (senza jQuery):

function copyToClipboard(elementId) {

  // Create a "hidden" input
  var aux = document.createElement("input");

  // Assign it the value of the specified element
  aux.setAttribute("value", document.getElementById(elementId).innerHTML);

  // Append it to the body
  document.body.appendChild(aux);

  // Highlight its content
  aux.select();

  // Copy the highlighted text
  document.execCommand("copy");

  // Remove it from the body
  document.body.removeChild(aux);

}
<p id="p1">P1: I am paragraph 1</p>
<p id="p2">P2: I am a second paragraph</p>
<button onclick="copyToClipboard('p1')">Copy P1</button>
<button onclick="copyToClipboard('p2')">Copy P2</button>
<br/><br/><input type="text" placeholder="Paste here for test" />

Si noti che ora passiamo l'id senza #.

Come riportato da madzohan nei commenti qui sotto, in alcuni casi c'è qualche strano problema con la versione a 64 bit di Google Chrome (che esegue il file localmente). Questo problema sembra essere stato risolto con la soluzione non jQuery sopra.

Madzohan ha provato in Safari e la soluzione ha funzionato ma usando document.execCommand('SelectAll')invece di usare .select()(come specificato nella chat e nei commenti sotto).

Come sottolinea PointZeroTwo nei commenti , il codice potrebbe essere migliorato in modo da restituire un risultato di successo / fallimento. Puoi vedere una demo su questo jsFiddle .


AGGIORNAMENTO: COPIA MANTENENDO IL FORMATO TESTO

Come ha sottolineato un utente nella versione spagnola di StackOverflow , le soluzioni sopra elencate funzionano perfettamente se si desidera copiare il contenuto di un elemento letteralmente, ma non funzionano così bene se si desidera incollare il testo copiato con il formato (come viene copiato in un input type="text", il formato è "perso").

Una soluzione per questo sarebbe quella di copiare in un contenuto modificabile dive quindi copiarlo usando execCommandin modo simile. Ecco un esempio: fai clic sul pulsante Copia, quindi incolla nella casella modificabile del contenuto di seguito:

function copy(element_id){
  var aux = document.createElement("div");
  aux.setAttribute("contentEditable", true);
  aux.innerHTML = document.getElementById(element_id).innerHTML;
  aux.setAttribute("onfocus", "document.execCommand('selectAll',false,null)"); 
  document.body.appendChild(aux);
  aux.focus();
  document.execCommand("copy");
  document.body.removeChild(aux);
}
#target {
  width:400px;
  height:100px;
  border:1px solid #ccc;
}
<p id="demo"><b>Bold text</b> and <u>underlined text</u>.</p>
<button onclick="copy('demo')">Copy Keeping Format</button> 

<div id="target" contentEditable="true"></div>

E in jQuery, sarebbe così:

function copy(selector){
  var $temp = $("<div>");
  $("body").append($temp);
  $temp.attr("contenteditable", true)
       .html($(selector).html()).select()
       .on("focus", function() { document.execCommand('selectAll',false,null); })
       .focus();
  document.execCommand("copy");
  $temp.remove();
}
#target {
  width:400px;
  height:100px;
  border:1px solid #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<p id="demo"><b>Bold text</b> and <u>underlined text</u>.</p>
<button onclick="copy('#demo')">Copy Keeping Format</button> 

<div id="target" contentEditable="true"></div>


5
strano ... qui funziona, ma non riesco a farlo localmente 0o jquery-1.11.3 Chrome 43.0.2357.130 (64-bit)
madzohan

2
@madzohan Ok, sono stato in grado di riprodurre il problema. È strano perché sono stato in grado di riprodurlo solo su locale (file: //) su Chrome a 64 bit. Ho anche trovato una soluzione rapida che funziona per me: usare JavaScript semplice invece di jQuery. Aggiornerò la risposta con quel codice. Per favore, controlla e fammi sapere se funziona per te.
Alvaro Montoro,

1
FWIW - document.execCommand ("copia") restituisce un valore booleano (IE, Chrome, Safari) che indica se la copia ha avuto esito positivo. Potrebbe essere utilizzato per visualizzare un messaggio di errore in caso di errore. Firefox genera un'eccezione in caso di errore (almeno nella v39), che richiede un tentativo / catch per gestire l'errore.
PointZeroDue

3
Questo non ha funzionato per me fino a quando non ho verificato che aux fosse visibile sulla pagina aggiungendo le seguenti righe: aux.style.position = "fixed"; aux.style.top = 0;sopra la appendChildchiamata.
Ariscris,

7
L'implementazione originale di jQuery non riesce a preservare le interruzioni di riga, poiché utilizza un elemento INPUT. L'uso di TEXTAREA invece risolve questo problema.
thomasfuchs,

37

clipboard.js è una bella utility che consente di copiare negli Appunti testo o dati HTML senza usare Flash. È molto facile da usare; basta includere il file .js e usare qualcosa del genere:

<button id='markup-copy'>Copy Button</button>

<script>
    document.getElementById('markup-copy').addEventListener('click', function() {
        clipboard.copy({
            'text/plain': 'Markup text. Paste me into a rich text editor.',
            'text/html': '<i>here</i> is some <b>rich text</b>'
        }).then(
            function(){console.log('success'); },
            function(err){console.log('failure', err);
        });
    });
</script>

clipboard.js è anche su GitHub .

Modifica il 15 gennaio 2016: la risposta principale è stata modificata oggi per fare riferimento alla stessa API nella mia risposta pubblicata nell'agosto 2015. Il testo precedente indicava agli utenti di utilizzare ZeroClipboard. Voglio solo essere chiaro che non ho strappato questo dalla risposta di jfriend00, piuttosto il contrario.


clipboard-js - è stato deprecato Messaggio dell'autore: Migrare
Yevgeniy Afanasyev

26

La semplicità è la sofisticatezza finale.
Se non vuoi che il testo da copiare sia visibile:

jQuery:

$('button.copyButton').click(function(){
    $(this).siblings('input.linkToCopy').select();      
    document.execCommand("copy");
});

HTML:

<button class="copyButton">click here to copy</button>
<input class="linkToCopy" value="TEXT TO COPY"
style="position: absolute; z-index: -999; opacity: 0;" />

non sembra al lavoro su iPad, non sono testati, ma una soluzione suggerita è qui: stackoverflow.com/a/34046084
user1063287

Per me ha funzionato, ma se il testo da copiare contiene i ritorni a capo, puoi usare anche un'area di testo.
Alex

13

With Line Breaks (estensione della risposta di Alvaro Montoro)

var ClipboardHelper = {

    copyElement: function ($element)
    {
       this.copyText($element.text())
    },
    copyText:function(text) // Linebreaks with \n
    {
        var $tempInput =  $("<textarea>");
        $("body").append($tempInput);
        $tempInput.val(text).select();
        document.execCommand("copy");
        $tempInput.remove();
    }
};

ClipboardHelper.copyText('Hello\nWorld');
ClipboardHelper.copyElement($('body h1').first());

9

È possibile utilizzare questo codice per copiare il valore di input nella pagina negli Appunti facendo clic su un pulsante

Questo è HTML

<input type="text" value="xxx" id="link" class="span12" />
<button type="button" class="btn btn-info btn-sm" onclick="copyToClipboard('#link')">
    Copy Input Value
</button>

Quindi per questo html, dobbiamo usare questo codice JQuery

function copyToClipboard(element) {
    $(element).select();
    document.execCommand("copy");
}

Questa è la soluzione più semplice per questa domanda


8

Un approccio ancora migliore senza flash o altri requisiti è clipboard.js . Tutto quello che devi fare è aggiungere data-clipboard-target="#toCopyElement"qualsiasi pulsante, inizializzarlo new Clipboard('.btn');e copierà il contenuto di DOM con IDtoCopyElement negli Appunti. Questo è uno snippet che copia il testo fornito nella tua domanda tramite un link.

Una limitazione però è che non funziona su Safari, ma funziona su tutti gli altri browser inclusi i browser per dispositivi mobili in quanto non utilizza il flash

$(function(){
  new Clipboard('.copy-text');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script>

<p id="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s</p>

<a class="copy-text" data-clipboard-target="#content" href="#">copy Text</a>


5
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link href="css/index.css" rel="stylesheet" />
    <script src="js/jquery-2.1.4.min.js"></script>
    <script>
        function copy()
        {
            try
            {
                $('#txt').select();
                document.execCommand('copy');
            }
            catch(e)
            {
                alert(e);
            }
        }
    </script>
</head>
<body>
    <h4 align="center">Copy your code</h4>
    <textarea id="txt" style="width:100%;height:300px;"></textarea>
    <br /><br /><br />
    <div align="center"><span class="btn-md" onclick="copy();">copy</span></div>
</body>
</html>

1
Questo può essere usato solo per Textarea e textbox.
Vignesh Chinnaiyan,

5
<div class="form-group">
    <label class="font-normal MyText">MyText to copy</label>&nbsp;
    <button type="button" class="btn btn-default btn-xs btnCopy" data="MyText">Copy</button>
</div>


$(".btnCopy").click(function () {
        var element = $(this).attr("data");
        copyToClipboard($('.' + element));
  });

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

Bella soluzione alternativa. Forse aggiungi .addClass("hidden")al <input>tag per non averlo mai mostrato nel browser?
Roland

5

È molto importante che il campo di input non abbia display: none. Il browser non selezionerà il testo e pertanto non verrà copiato. Utilizzare opacity: 0con una larghezza di 0px per risolvere il problema.


4

È un metodo più semplice per copiare il contenuto

 <div id="content"> Lorepm ispum </div>
 <button class="copy" title="content">Copy Sorce</button>

function SelectContent(element) {
                        var doc = document
                            , text = doc.getElementById(element)
                            , range, selection
                        ;    
                        if (doc.body.createTextRange) {
                            range = document.body.createTextRange();
                            range.moveToElementText(text);
                            range.select();
                        } else if (window.getSelection) {
                            selection = window.getSelection();        
                            range = document.createRange();
                            range.selectNodeContents(text);
                            selection.removeAllRanges();
                            selection.addRange(range);

                        }
                         document.execCommand('Copy');
                    }
                    $(".copy").click(function(){

                         SelectContent( $(this).attr('title'));
                    });

4

jQuery soluzione semplice.

Dovrebbe essere attivato dal clic dell'utente.

$("<textarea/>").appendTo("body").val(text).select().each(function () {
            document.execCommand('copy');
        }).remove();

3

puoi semplicemente usare questa lib per realizzare facilmente l'obiettivo della copia!

https://clipboardjs.com/

Copiare il testo negli appunti non dovrebbe essere difficile. Non dovrebbe richiedere dozzine di passaggi da configurare o centinaia di KB da caricare. Ma soprattutto, non dovrebbe dipendere da Flash o da un framework gonfio.

Ecco perché esiste clipboard.js.

o

https://github.com/zeroclipboard/zeroclipboard

http://zeroclipboard.org/

La libreria ZeroClipboard fornisce un modo semplice per copiare il testo negli Appunti utilizzando un filmato Adobe Flash invisibile e un'interfaccia JavaScript.


2

Il testo da copiare è in input di testo, come: <input type="text" id="copyText" name="copyText"> e, facendo clic sul pulsante sopra il testo, questo dovrebbe essere copiato negli appunti, quindi il pulsante è simile a: <button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button> Il tuo script dovrebbe essere come:

<script language="JavaScript">
$(document).ready(function() {
var clip = new ZeroClipboard($("#copy_button"), {
  moviePath: "ZeroClipboard.swf"
}); 
});

</script>

Per i file CDN

nota : ZeroClipboard.swfe ZeroClipboard.js"il file deve trovarsi nella stessa cartella in cui si trova il tuo file utilizzando questa funzionalità, O devi includere come includiamo <script src=""></script>nelle nostre pagine.


6
Flash sta andando come Geocities.
un programmatore,

2

La maggior parte delle risposte proposte crea un ulteriore elemento di input nascosto temporaneo. Poiché oggigiorno la maggior parte dei browser supporta la modifica del contenuto div, propongo una soluzione che non crei elementi nascosti, preservi la formattazione del testo e utilizzi la libreria JavaScript o jQuery pura.

Ecco un'implementazione di scheletro minimalista che utilizza il minor numero di righe di codici a cui potrei pensare:

//Pure javascript implementation:
document.getElementById("copyUsingPureJS").addEventListener("click", function() {
  copyUsingPureJS(document.getElementById("copyTarget"));
  alert("Text Copied to Clipboard Using Pure Javascript");
});

function copyUsingPureJS(element_id) {
  element_id.setAttribute("contentEditable", true);
  element_id.setAttribute("onfocus", "document.execCommand('selectAll',false,null)");
  element_id.focus();
  document.execCommand("copy");
  element_id.removeAttribute("contentEditable");
  
}

//Jquery:
$(document).ready(function() {
  $("#copyUsingJquery").click(function() {
    copyUsingJquery("#copyTarget");
  });
 

  function copyUsingJquery(element_id) {
    $(element_id).attr("contenteditable", true)
      .select()
      .on("focus", function() {
        document.execCommand('selectAll', false, null)
      })
      .focus()
    document.execCommand("Copy");
    $(element_id).removeAttr("contenteditable");
     alert("Text Copied to Clipboard Using jQuery");
  }
});
#copyTarget {
  width: 400px;
  height: 400px;
  border: 1px groove gray;
  color: navy;
  text-align: center;
  box-shadow: 0 4px 8px 0 gray;
}

#copyTarget h1 {
  color: blue;
}

#copyTarget h2 {
  color: red;
}

#copyTarget h3 {
  color: green;
}

#copyTarget h4 {
  color: cyan;
}

#copyTarget h5 {
  color: brown;
}

#copyTarget h6 {
  color: teal;
}

#pasteTarget {
  width: 400px;
  height: 400px;
  border: 1px inset skyblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="copyTarget">
  <h1>Heading 1</h1>
  <h2>Heading 2</h2>
  <h3>Heading 3</h3>
  <h4>Heading 4</h4>
  <h5>Heading 5</h5>
  <h6>Heading 6</h6>
  <strong>Preserve <em>formatting</em></strong>
  <br/>
</div>

<button id="copyUsingPureJS">Copy Using Pure JavaScript</button>
<button id="copyUsingJquery">Copy Using jQuery</button>
<br><br> Paste Here to See Result
<div id="pasteTarget" contenteditable="true"></div>


2

Appunti-polyfill libreria è un Polyfill per la moderna API appunti asincrona basata su Promise.

installa in CLI:

npm install clipboard-polyfill 

importare come appunti nel file JS

window.clipboard = require('clipboard-polyfill');

esempio

Lo sto usando in bundle con require("babel-polyfill");e l'ho testato su Chrome 67. Tutto bene per la produzione.


1

codice HTML qui

    <input id="result" style="width:300px"/>some example text
    <button onclick="copyToClipboard('result')">Copy P1</button>
    <input type="text" style="width:400px" placeholder="Paste here for test" />

CODICE JS:

     function copyToClipboard(elementId) {

                      // Create a "hidden" input
                      var aux = document.createElement("input");

                      aux.setAttribute("value", document.getElementById(elementId).value);
                      // Append it to the body
                      document.body.appendChild(aux);
                      // Highlight its content
                      aux.select();
                      // Copy the highlighted text
                      document.execCommand("copy");
                      // Remove it from the body
                      document.body.removeChild(aux);
                    }

cambia questo: .value in .innerHTML
Omar N Shamali

1

puoi copiare un singolo testo a parte il testo di un elemento HTML.

        var copyToClipboard = function (text) {
            var $txt = $('<textarea />');

            $txt.val(text)
                .css({ width: "1px", height: "1px" })
                .appendTo('body');

            $txt.select();

            if (document.execCommand('copy')) {
                $txt.remove();
            }
        };

0

JS puro, senza onclick incorporato, per le classi abbinate "pulsante copia - contenuto". Sarebbe più comodo, se hai molti elementi)

(function(){

/* Creating textarea only once, but not each time */
let area = document.createElement('textarea');
document.body.appendChild( area );
area.style.display = "none";

let content = document.querySelectorAll('.js-content');
let copy    = document.querySelectorAll('.js-copy');

for( let i = 0; i < copy.length; i++ ){
  copy[i].addEventListener('click', function(){
    area.style.display = "block";
    /* because the classes are paired, we can use the [i] index from the clicked button,
    to get the required text block */
    area.value = content[i].innerText;
    area.select();
    document.execCommand('copy');   
    area.style.display = "none";

    /* decorative part */
    this.innerHTML = 'Cop<span style="color: red;">ied</span>';
    /* arrow function doesn't modify 'this', here it's still the clicked button */
    setTimeout( () => this.innerHTML = "Copy", 2000 );
  });
}

})();
hr { margin: 15px 0; border: none; }
<span class="js-content">1111</span>
<button class="js-copy">Copy</button>
<hr>
<span class="js-content">2222</span>
<button class="js-copy">Copy</button>
<hr>
<span class="js-content">3333</span>
<button class="js-copy">Copy</button>

Supporto per browser precedente:


-1

Entrambi funzioneranno come un fascino :),

Javascript:

function CopyToClipboard(containerid) {
if (document.selection) { 
    var range = document.body.createTextRange();
    range.moveToElementText(document.getElementById(containerid));
    range.select().createTextRange();
    document.execCommand("copy"); 

} else if (window.getSelection) {
    var range = document.createRange();
     range.selectNode(document.getElementById(containerid));
     window.getSelection().addRange(range);
     document.execCommand("copy");
     alert("text copied") 
}}

Anche in HTML,

<button id="button1" onclick="CopyToClipboard('div1')">Click to copy</button>

<div id="div1" >Text To Copy </div>

<textarea placeholder="Press ctrl+v to Paste the copied text" rows="5" cols="20"></textarea>

JQUERY: https://paulund.co.uk/jquery-copy-clipboard

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.