Wie kopiere ich den Text in einem Div in die Zwischenablage? Ich habe ein div und muss einen Link hinzufügen, der den Text zur Zwischenablage hinzufügt. Gibt es dafür eine Lösung?
<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>
Nachdem ich auf Text kopieren geklickt und dann Ctrl+ Vgedrückt habe, muss dieser eingefügt werden.
Antworten:
Ab 2016 bearbeiten
Ab 2016 können Sie jetzt in den meisten Browsern Text in die Zwischenablage kopieren, da die meisten Browser die Möglichkeit haben, eine Textauswahl programmgesteuert in die Zwischenablage zu kopieren, wobei eine Auswahl
document.execCommand("copy")
funktioniert.Wie bei einigen anderen Aktionen in einem Browser (z. B. beim Öffnen eines neuen Fensters) kann das Kopieren in die Zwischenablage nur über eine bestimmte Benutzeraktion (z. B. einen Mausklick) erfolgen. Dies kann beispielsweise nicht über einen Timer erfolgen.
Hier ist ein Codebeispiel:
Hier ist eine etwas fortgeschrittenere Demo: https://jsfiddle.net/jfriend00/v9g1x0o6/
Und Sie können auch eine vorgefertigte Bibliothek erhalten , die dies mit für Sie tut clipboard.js .
Alter, historischer Teil der Antwort
Das direkte Kopieren in die Zwischenablage über JavaScript ist aus Sicherheitsgründen von keinem modernen Browser gestattet. Die häufigste Problemumgehung besteht darin, eine Flash-Funktion zum Kopieren in die Zwischenablage zu verwenden, die nur durch einen direkten Benutzerklick ausgelöst werden kann.
Wie bereits erwähnt, ist ZeroClipboard ein beliebter Codesatz zum Verwalten des Flash-Objekts zum Kopieren. Ich habe es benutzt. Wenn Flash auf dem Browsing-Gerät installiert ist (was Mobilgeräte oder Tablets ausschließt), funktioniert es.
Die nächsthäufigste Problemumgehung besteht darin, den an die Zwischenablage gebundenen Text einfach in ein Eingabefeld zu platzieren, den Fokus auf dieses Feld zu verschieben und den Benutzer anzuweisen, Ctrl+ Czu drücken, um den Text zu kopieren.
Weitere Diskussionen zu diesem Problem und möglichen Problemumgehungen finden Sie in diesen früheren Stack Overflow-Beiträgen:
Wie kopiere ich in JavaScript in die Zwischenablage?
Wie kopiere ich Text mit jQuery in die Zwischenablage des Clients?
Wie können Sie ohne Flash in die Zwischenablage kopieren?
Diese Fragen, die nach einer modernen Alternative zur Verwendung von Flash fragen, haben viele Fragen und keine Antworten mit einer Lösung erhalten (wahrscheinlich, weil es keine gibt):
HTML5-Alternative zum Flash-basierten ZeroClipboard zum sicheren Kopieren von Daten in die Zwischenablage?
Ohne Flash in die Zwischenablage kopieren
Internet Explorer und Firefox verfügten früher über nicht standardmäßige APIs für den Zugriff auf die Zwischenablage, aber ihre moderneren Versionen haben diese Methoden (wahrscheinlich aus Sicherheitsgründen) abgelehnt.
Es gibt eine aufkommende Standardanstrengung, um zu versuchen, einen "sicheren" Weg zu finden, um die häufigsten Probleme in der Zwischenablage zu lösen (wahrscheinlich ist eine bestimmte Benutzeraktion erforderlich, wie es die Flash-Lösung erfordert), und es sieht so aus, als ob sie teilweise in der neuesten Version implementiert werden könnte Versionen von Firefox und Chrome, aber das habe ich noch nicht bestätigt.
quelle
document.execCommand("copy")
ausreichenden Umständen aktiviert , um sich darauf verlassen zu können. Daher bemühe ich mich, meine Antwort auf dem neuesten Stand zu halten (die ursprünglich vor fast 2 Jahren verfasst wurde). Wir haben noch keine zuverlässige Lösung für Safari, außer den Text vorzuwählen und den Benutzer anzuweisen, manuell Strg + C zu drücken, aber zumindest werden an anderer Stelle Fortschritte erzielt.document.execCommand("copy")
Es gibt noch einen anderen Nicht-Flash-Weg (abgesehen von der in der Antwort von jfriend00 erwähnten Zwischenablage-API ). Sie müssen den Text auswählen und dann den Befehl ausführen , um den aktuell auf der Seite ausgewählten Text in die Zwischenablage zu kopieren.
copy
Diese Funktion kopiert beispielsweise den Inhalt des übergebenen Elements in die Zwischenablage (aktualisiert mit Vorschlägen in den Kommentaren von PointZeroTwo ):
So funktioniert es:
document.execCommand("copy")
.Eine kurze Demo finden Sie hier:
Das Hauptproblem ist, dass derzeit nicht alle Browser diese Funktion unterstützen , aber Sie können sie für die Hauptbrowser verwenden von:
Update 1: Dies kann auch mit einer reinen JavaScript-Lösung (keine jQuery) erreicht werden:
Beachten Sie, dass wir die ID jetzt ohne das # übergeben.
Wie Madzohan in den Kommentaren unten berichtete, gibt es in einigen Fällen ein seltsames Problem mit der 64-Bit-Version von Google Chrome ( lokale Ausführung der Datei). Dieses Problem scheint mit der oben genannten Nicht-jQuery-Lösung behoben zu sein.
Madzohan hat es in Safari versucht und die Lösung hat funktioniert, aber verwendet
document.execCommand('SelectAll')
statt verwendet.select()
(wie im Chat und in den Kommentaren unten angegeben).Wie PointZeroTwo in den Kommentaren hervorhebt , könnte der Code verbessert werden, sodass ein Erfolgs- / Fehlerergebnis zurückgegeben wird . Sie können eine Demo auf dieser jsFiddle sehen .
UPDATE: KOPIEREN SIE DAS TEXTFORMAT
Wie ein Benutzer in der spanischen Version von StackOverflow betont hat , funktionieren die oben aufgeführten Lösungen perfekt, wenn Sie den Inhalt eines Elements buchstäblich kopieren möchten, aber sie funktionieren nicht so gut, wenn Sie den kopierten Text mit Format (as) einfügen möchten es wird in ein kopiert
input type="text"
, das Format ist "verloren").Eine Lösung hierfür wäre, in einen bearbeitbaren Inhalt zu kopieren
div
und ihn dannexecCommand
auf ähnliche Weise mit dem zu kopieren . Hier ist ein Beispiel: Klicken Sie auf die Schaltfläche "Kopieren" und fügen Sie es in das unten stehende bearbeitbare Feld ein:Und in jQuery wäre es so:
quelle
aux.style.position = "fixed";
aux.style.top = 0;
über demappendChild
Anruf.clipboard.js ist ein nettes Dienstprogramm, mit dem Sie Text- oder HTML-Daten ohne Verwendung von Flash in die Zwischenablage kopieren können. Es ist sehr einfach zu bedienen; Fügen Sie einfach die .js hinzu und verwenden Sie Folgendes:
clipboard.js ist auch auf GitHub .
Bearbeiten am 15. Januar 2016: Die Top-Antwort wurde heute bearbeitet, um auf dieselbe API in meiner Antwort vom August 2015 zu verweisen. Der vorherige Text wies Benutzer an, ZeroClipboard zu verwenden. Ich möchte nur klarstellen, dass ich dies nicht aus der Antwort von jfriend00 herausgerissen habe, sondern umgekehrt.
quelle
Einfachheit ist die entscheidende Kultiviertheit.
Wenn Sie nicht möchten, dass der zu kopierende Text sichtbar ist:
jQuery:
HTML:
quelle
Mit Zeilenumbrüchen (Erweiterung der Antwort von Alvaro Montoro)
quelle
Sie können diesen Code zum Kopieren des Eingabewerts in die Seite in der Zwischenablage verwenden, indem Sie auf eine Schaltfläche klicken
Das ist Html
Dann müssen wir für dieses HTML diesen JQuery-Code verwenden
Dies ist die einfachste Lösung für diese Frage
quelle
Ein noch besserer Ansatz ohne Flash oder andere Anforderungen ist clipboard.js . Alles, was Sie tun müssen, ist, eine
data-clipboard-target="#toCopyElement"
beliebige Schaltfläche hinzuzufügen , zu initialisierennew Clipboard('.btn');
und den Inhalt von DOM mit der IDtoCopyElement
in die Zwischenablage zu kopieren . Dies ist ein Ausschnitt, der den in Ihrer Frage angegebenen Text über einen Link kopiert.Eine Einschränkung ist jedoch, dass es nicht auf Safari funktioniert, sondern auf allen anderen Browsern, einschließlich mobilen Browsern, da kein Flash verwendet wird
quelle
quelle
quelle
.addClass("hidden")
zum<input>
Tag hinzufügen , damit es nie im Browser angezeigt wird?Es ist sehr wichtig, dass das Eingabefeld nicht hat
display: none
. Der Browser wählt den Text nicht aus und wird daher nicht kopiert. Verwenden Sie dieseopacity: 0
Option mit einer Breite von 0 Pixel, um das Problem zu beheben.quelle
Es ist die einfachste Methode, den Inhalt zu kopieren
quelle
einfache jQuery-Lösung.
Sollte durch Klicken des Benutzers ausgelöst werden.
quelle
Sie können einfach diese Bibliothek verwenden, um das Kopierziel einfach zu verwirklichen!
https://clipboardjs.com/
oder
https://github.com/zeroclipboard/zeroclipboard
http://zeroclipboard.org/
quelle
Der zu kopierende Text befindet sich in der Texteingabe wie:
<input type="text" id="copyText" name="copyText">
Wenn Sie auf die Schaltfläche klicken, sollte der Text in die Zwischenablage kopiert werden. Die Schaltfläche lautet also wie folgt:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button>
Ihr Skript sollte wie folgt aussehen:Für CDN-Dateien
Hinweis :
ZeroClipboard.swf
undZeroClipboard.js
"Die Datei sollte sich im selben Ordner befinden wie Ihre Datei, die diese Funktion verwendet. ODER Sie müssen angeben, wie wir es<script src=""></script>
auf unseren Seiten angeben.quelle
Die meisten der vorgeschlagenen Antworten erstellen zusätzliche temporäre versteckte Eingabeelemente. Da die meisten Browser heutzutage die Bearbeitung von Div-Inhalten unterstützen, schlage ich eine Lösung vor, die keine versteckten Elemente erstellt, die Textformatierung beibehält und reine JavaScript- oder jQuery-Bibliothek verwendet.
Hier ist eine minimalistische Skelettimplementierung mit den wenigsten Codezeilen, die mir einfallen:
quelle
Die Zwischenablage-Polyfill- Bibliothek ist eine Polyfill für die moderne Promise-basierte asynchrone Zwischenablage-API.
In CLI installieren:
als Zwischenablage in JS-Datei importieren
Beispiel
Ich verwende es in einem Bundle mit
require("babel-polyfill");
und teste es auf Chrom 67. Alles gut für die Produktion.quelle
HTML-Code hier
JS CODE:
quelle
Sie können einen einzelnen Text neben dem Text eines HTML-Elements kopieren.
quelle
Pure JS ohne Inline-Onclick für gepaarte Klassen "content - copy button". Wäre bequemer, wenn Sie viele Elemente haben)
Unterstützung für ältere Browser:
Code-Snippet anzeigen
quelle
Beides wird wie ein Zauber wirken :),
JAVASCRIPT:
Auch in HTML,
JQUERY: https://paulund.co.uk/jquery-copy-clipboard
quelle