Haben Sie jemals versucht, Text zu kopieren und einzufügen, nur um festzustellen, dass es frustrierend, umständlich oder sogar unmöglich ist? Ich wette, das haben Sie. Das ist kein Zufall. Im Web haben Sie eine beträchtliche Kontrolle darüber. Lassen Sie uns ein paar Dinge als Denkanstoß darlegen.
Nicht wirklich Text
Vielleicht ist das das offensichtlichste Problem, also wollen wir uns nicht lange damit aufhalten. Wenn Text im Web „echter Text“ sein kann, tun Sie das bitte. Im Vergleich zu einem Bild von Text ist echter Text zugänglicher, besser indexierbar und nützlicher. Sie können ihn zum Kopieren und Einfügen auswählen!
Versehentliche Überlappungen
Haben Sie schon einmal diesen Effekt gesehen, bei dem Text unten ausblendet? Dies wird oft erreicht, indem ein Verlaufsbild über den Text gelegt wird. Sie können teilweise hindurchsehen, aber dieses Element liegt immer noch über dem Text, was bedeutet, dass Mausinteraktionen auf der Überlappung stattfinden, nicht auf dem Text.

In dieser Demo ist die Überlappung ein Pseudoelement, das mit einem Verlauf gefüllt und darüber positioniert ist. Glücklicherweise ist dies weitgehend eine behebbare Situation. pointer-events: none; auf der Überlappung hilft schon sehr. Mit dieser Einstellung werden Zeigerinteraktionen das Element vollständig ignorieren. Klicks gehen direkt hindurch, als wäre es nicht da.
Das ist großartig, außer dass IE 10 keine Zeigerereignisse unterstützt. Wenn Sie sich immer noch darauf verlassen wollten, hat Modernizr v3 einen Test dafür, sodass Sie den Überlagerungseffekt nur anwenden könnten, wenn Sie wissen, dass Zeigerereignisse funktionieren.
Oder, anstatt überhaupt eine Überlagerung, könnten Sie einzelne Zeilen einfärben, um es wie ein Ausblenden aussehen zu lassen, wie in diesem Artikel behandelt.
Das Popup nach der Auswahl
Manche Websites machen ziemlich große Annahmen, nachdem Sie Text ausgewählt haben. Eine übliche ist: OH GUTE JA HALLO HALLO ICH SEHE SIE WOLLEN OFFENSICHTLICH DIESEN TEXT IN SOZIALEN MEDIEN TEILEN LASSEN SIE MICH HELFEN. Nicht jeder ist ein Fan. Abgesehen davon, dass es voreilig und übereifrig ist, kann es beim Screenshot helfen.

Highlighter.js ist eine Bibliothek, die dies allzu leicht macht.
CSS-Steuerung der Auswählbarkeit
Es gibt tatsächlich eine CSS-Eigenschaft, die speziell zur Steuerung der Auswählbarkeit von Text dient: user-select.
.unselectable {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
user-select: none; /* Likely future */
}
Abgesehen von einigen Browser-Eigenheiten ist Text mit dieser Einstellung nicht auswählbar. Das kann sehr nützlich sein, wenn Sie versuchen, eine bessere UX rund um die Auswählbarkeit von Text auf Ihrer Website zu gestalten.
Auf Mobilgeräten erfolgt die Textauswahl im Allgemeinen durch langes Tippen, wodurch einige Textauswahloptionen angezeigt werden. Sie können diesen „Callout“ (und damit die Textauswahl) mit
-webkit-touch-callout: default /* displays the callout */
-webkit-touch-callout: none /* disables the callout */
Anderer sichtbarer Text, der nicht kopiert wird
Sie können Text mit dem obigen CSS unauswählbar machen, aber manche Texte sind automatisch nicht auswählbar
- Standardzähler, wie die Spiegelstriche von unsortierten Listen oder die Nummern von sortierten Listen
- Benutzerdefinierte CSS-Zähler
- Text in Pseudoelementen
Versehentliches Auswählen von Zeilennummern
Manchmal stoßen Sie auf einen Codeblock auf einer Website, den Sie kopieren und einfügen möchten. Nachdem Sie ihn eingefügt haben, stellen Sie fest, dass die Zeilennummern mitgekommen sind.
Das ist eigentlich ziemlich überraschend, da es so aussieht, als müsste man sich schon sehr anstrengen, um das zu erreichen. Wenn wir jetzt wissen, was wir wissen, hätten diese Zeilennummern CSS verwenden können, um sie vom Kopieren abzuhalten. Oder der Code hätte als Liste markiert werden können, um Nummern anzuzeigen, die nicht kopiert werden. Oder es hätten benutzerdefinierte Zähler verwendet werden können, die nicht kopiert werden. Oder Pseudoelemente vor den Zeilen, die nicht kopiert werden (relevanter Artikel).
Der einzige Weg, wie das passieren kann, ist, dass einfach Text direkt in das Element am Anfang der Zeile gesetzt wurde und nichts unternommen wurde, um ihn vom Kopieren abzuhalten. Wahrscheinlich eine ziemlich einfache Lösung, die wir jedem Täter ermutigen könnten, vorzunehmen.
Text (ganz) mit JavaScript auswählen
Formularelemente werden oft dafür verwendet. Wenn Sie Text bereitstellen möchten, der *speziell* zum Kopieren und Einfügen gedacht ist, setzen Sie ihn normalerweise in ein input- oder textarea-Element.
<textarea id="ta">a bunch of text</textarea>
Dann ist es sehr einfach, diesen Text programmgesteuert auszuwählen
var ta = document.getElementById("ta");
ta.focus();
ta.select();
Das kann man bei einem nicht wirklich machen
oder was auch immer. Außerdem, wenn sich ein Benutzer in einem Formularelement befindet, wählt der übliche Befehl „Alles auswählen“ nur den Text innerhalb der Grenzen dieses Elements aus, was ein gutes, erwartetes Verhalten ist.
Wenn Sie das Verhalten wünschen, dass der Text beim Anklicken ausgewählt wird, hier ist eine ziemlich prägnante jQuery-Methode dafür
$('#ta').on("focus", function(e) {
e.target.select();
$(e.target).one('mouseup', function(e) {
e.preventDefault();
});
});
Der Teil mit mouseup erlaubt, dass der Text nach dem mouseup-Ereignis ausgewählt bleibt. Normalerweise deselektiert mouseup den Text und aktiviert den Cursor.
Ich mag diesen Weg, weil er nicht erzwingt, dass der gesamte Text *egal was* ausgewählt wird (was die Leute nicht mögen), sondern nur beim ersten Fokus. Wenn Sie also nach dem Fokus die Auswahl selbst ändern und nur einen Teil des Textes kopieren möchten, können Sie das tun.

Wenn Sie kein Klick-zum-Auswählen anbieten, macht das manchmal auch Leute unglücklich, also ist es eine Balance. Daher mag ich die oben genannte Fokus-zu-Auswahl-Methode, und dann lass es so sein.
Es gibt noch viel mehr über die Textauswahl mit JavaScript zu wissen, einschließlich Range Selection und Ähnlichem, was ziemlich kompliziert ist und besser für einen anderen Artikel aufgespart wird.
Programmgesteuertes Kopieren in die Zwischenablage
Diese Fähigkeit ist erst kürzlich in JavaScript aufgetaucht. Zum Zeitpunkt des Schreibens nur Chrome und IE. Dies geschieht über document.execCommand('copy');
Es gibt eine ganze Geschichte hier, mit der ich nicht ganz auf dem Laufenden bin. Ich glaube, es war hauptsächlich ein Sicherheitsbedenken, weshalb es in JavaScript unmöglich war. Nicht zu vergessen ein Bedenken wegen Geschmacklosigkeit (wer möchte schon eine Website besuchen, nur um festzustellen, dass seine Zwischenablage manipuliert wurde?). Aus welchem Grund auch immer, es ist wieder verfügbar.
Matt Gaunt bietet einige Beispielcodes
E-Mailen Sie mir an [email protected]
var copyEmailBtn = document.querySelector('.js-emailcopybtn');
copyEmailBtn.addEventListener('click', function(event) {
// Select the email link anchor text
var emailLink = document.querySelector('.js-emaillink');
var range = document.createRange();
range.selectNode(emailLink);
window.getSelection().addRange(range);
try {
// Now that we've selected the anchor text, execute the copy command
var successful = document.execCommand('copy');
var msg = successful ? 'successful' : 'unsuccessful';
console.log('Copy email command was ' + msg);
} catch(err) {
console.log('Oops, unable to copy');
}
// Remove the selections - NOTE: Should use
// removeRange(range) when it is supported
window.getSelection().removeAllRanges();
});
Das Kopieren von Text in die Zwischenablage war schon immer ein Wunsch. Wir mussten früher Flash verwenden, typischerweise eine Bibliothek namens ZeroClipboard. Hier ist ein Tutorial von David Walsh dazu.
Wie man mit/ohne Stil/Formatierung einfügt
Wenn Sie Text kopieren, wird er im Allgemeinen mit Formatierung übernommen.

Auf Macs gibt es jedoch den Befehl **Einfügen und Stil anpassen**, der *sehr* nützlich sein kann, um diese Formatierung zu entfernen, wenn Sie sie nicht möchten. Zum Beispiel beim Einfügen in eine E-Mail. Die übliche Tastenkombination dafür ist Command-Shift-V.

Ich bevorzuge im Allgemeinen dieses Verhalten, also habe ich das gemacht, indem ich es auf Command-V abgebildet habe (was das normale Einfügen überschreibt).

Sie können immer noch mit Formatierung über die Menüs einfügen, wenn Sie müssen.
Zusätzlicher Müll in der Zwischenablage
Haben Sie jemals Text von einer Website ausgewählt, nur um festzustellen, dass am Ende Ihrer Auswahl zusätzlicher Müll angehängt wurde, wenn Sie ihn einfügen? LESEN SIE MEHR UNTER FART-KNUCKLE.BUSINESS!!!
Ungeschickte beibehaltene Großschreibung
Sie können Text in CSS mit text-transform: uppercase; großschreiben. Dies führt jedoch zu einem ziemlich großen (nervigen) Funktionsunterschied beim Kopieren und Einfügen zwischen den Browsern.
Nachdem ich schnell getestet habe
- Firefox und IE **beachten den ursprünglichen Text** (was im DOM steht).
- Chrome, Safari, Opera und iOS **beachten die CSS**-Großschreibung.
Ich bevorzuge ersteres.
Block-Links können das Kopieren erschweren
In HTML5 haben wir gelernt, dass wir nun Anker-Tags um alles wickeln können, was wir wollen. Auch wenn sie Inline-Elemente sind, können wir sie ohne Bedenken wegen Ungültigkeit um Blöcke wickeln. Dies geschieht nicht ohne Konsequenzen.
Titel
Dies macht den gesamten Blocktitel ohne CSS-Unterstützung zu einem Link, macht den Titel aber etwas schwerer zu kopieren. Wenn man diese Markup-Struktur um eine Überschrift legt und h3 > a { display: block; } verwendet, wird es etwas einfacher, vorausgesetzt, die h3 hat etwas Padding, da man dann die Auswahl im Padding beginnen und sich bewegen kann.
Einerseits gibt es also eine größere Klickfläche, andererseits ist es etwas schwieriger zu kopieren (wenn Sie ein normaler Rechts-nach-links-Kopierer sind). Ihre Entscheidung.
Siehe den Pen Block titles kinda hard to copy von Chris Coyier (@chriscoyier) auf CodePen.

Manchmal kann die Blockstruktur selbst ärgerliche Situationen verursachen. Wie hier, Sie versuchen einen Filmtitel auszuwählen, aber ein Pixel zu weit und Sie erhalten einen Haufen seltsamen Textes an völlig unzusammenhängenden Positionen

Das ist hier kein riesiges Problem, da die Leute daran gewöhnt sind und wissen, wie sie zurücktreten und bekommen, was sie brauchen. Aber es ist erwähnenswert. Selbst Dinge wie die Flexbox-Sortierung können die Textauswahl völlig verändern, auch wenn visuell alles identisch aussieht.
Siehe den Pen flex ordering and selection von Chris Coyier (@chriscoyier) auf CodePen.

In die Konsole einfügen
Klassischer Anfängerfehler: Das „$ “ am Anfang von Konsolenbefehlen in Blogbeiträgen über die Durchführung von Terminalaktionen kopieren. HÄNDE HOCH, Leute. Nur ich? Verdammt. Jedenfalls gibt es eine ziemlich lustige Dotfile-Sache, die Sie warnt, wenn Sie das tun.
Noch mehr?
Haben Sie irgendwelche persönlichen Abneigungen gegen Kopieren und Einfügen oder die Auswahl im Allgemeinen im Web?
Eine weitere Anmerkung zu Text in Pseudoelementen: Sie sind auf der Seite nicht durchsuchbar (⌘-f), was je nach Situation auch ein Zugänglichkeitsbedenken darstellt.
Die automatische Auswahl geschieht beim mouseup, sodass Sie Textteile kopieren können, indem Sie die Maustaste gedrückt halten und ⌘C drücken
Ich bin ein Fan von Doppel-Klick zum Auswählen von allem Text, je nach Kontext.
Ich weiß, manche Leute denken, Doppel-Klick (und Dreifach-Klick) ist schlechte UX, aber... ach was.
Das Auswählen des gesamten Textes in JavaScript ist das Schlimmste überhaupt. Es ist wirklich unglaublich, dass jemand damit glücklich ist.
„Es gibt tatsächlich eine CSS-Eigenschaft, die speziell zur Steuerung der Auswählbarkeit von Text dient: user-select.“
Oh, fein. Mehr CSS, das bis zum Äußersten missbraucht wird, während man vergeblich versucht, sein geistiges Eigentum vor den kleinen Plagiatoren zu „retten“, zum Nachteil derer, die einfach nur einen Link mit einem Absatz speichern wollen, um sie an interessante Inhalte zu erinnern, die hinter diesem albernen Domainnamen steckten.
Ich stimme vollkommen zu. Der legitime Anwendungsfall, wenn man die Auswahl von UI-Elementen verhindern möchte, ist sehr eng gefasst, während diese CSS-Eigenschaft in jeder möglichen Weise missbraucht werden kann.
Es ist manchmal schön, user-select:none; auf benutzerdefinierten Div-Buttons zu verwenden, da dies verhindert, dass der Text innerhalb des Buttons beim Doppelklick ausgewählt wird.
Das ist zumindest das einzige Mal, dass ich es benutzt habe.
Es ist tatsächlich ein Lebensretter für alle Arten von Pop-up-Bildern (je nachdem, wie sie geschlossen werden sollen), wenn der Benutzer versehentlich ein Bild auswählen kann, ohne es zuverlässig wieder abwählen zu können. So werden sie nicht in Blau überlagert und Sie können Bilder zuverlässig anders kopieren/manipulieren, zum Beispiel durch Rechtsklick.
Es ist auch hilfreich für den Kiosk-Modus auf berührbaren Bildschirmen. Um die Textauswahl zu verhindern, wenn der Benutzer einen Button verfehlt.
Anderer sichtbarer Text, der nicht kopiert wird
<input disabled>und<textarea disabled>in Firefox erlauben Ihnen nicht, den Text auszuwählen oder zu kopieren.Es ist ziemlich ärgerlich, Daten in einem Formular mit gesperrten Feldern kopieren zu wollen.
<input readonly>erlaubt jedoch die Auswahl und das Kopieren.„IE 10 unterstützt keine Zeigerereignisse“
Ich bin ziemlich sicher, dass ich einmal eine Lösung dafür in einer früheren Version von IE mit der Verwendung von SVG gefunden habe. Ich würde versuchen, mich zu erinnern, aber es ist spät und ich sollte im Bett sein :P
Gute Zusammenfassung, sehr umfassend.
Kleiner Tippfehler..
$(e.target).one(‘mouseup’, function(e) {
Sollte .on(…)
Kein Tippfehler.
http://api.jquery.com/one/
Man kann die vollständige Auswahl von Text auf einer Website umgehen, wenn man nur ein Stück möchte, indem man Strg + C drückt, bevor mouseup ausgelöst wird.
Hallo Chris
Sie könnten auch die normale Einfüge-Tastenkombination auf CMD + SHIFT + V setzen. Dann brauchen Sie nicht einmal das Menü. ;)
Marc
Beachten Sie, dass Sie in Firefox mehrere Zeilen in Firefox auswählen können. Mit
Strg/Cmd+ AuswahlHat jemand eine Meinung dazu, welcher der beste webbasierte WYSIWYG-Editor für das Kopieren und Einfügen von Inhalten ist?
Hat jemand eine Meinung dazu, welcher der beste webbasierte WYSIWYG-Editor für das Kopieren und Einfügen von Inhalten ist?
Bitte
Wir bauen einen bei copycopy.com
Auf OSX können Sie **CMD+Shift+alt+v** verwenden, um in jeder App ohne Formatierung einzufügen.
Zu Ihrem Punkt über text-transform und das Kopieren von Großbuchstaben: Ich bevorzuge auch die Firefox/IE-Methode, den Quelltext und nicht den formatierten Text zu kopieren. Ich habe mich darüber aufgeregt: http://rosel.li/060612
Ich denke auch, dass die WebKit-basierten Browser gegen die Spezifikation verstoßen, indem sie den großgeschriebenen Text kopieren: „Diese Eigenschaft transformiert Text zu Styling-Zwecken. (Sie hat keine Auswirkungen auf den zugrunde liegenden Inhalt.)“ Spezifikation: http://www.w3.org/TR/css-text-3/#text-transform
Ich lese das so, dass der zugrunde liegende Inhalt (den ich kopiere) nicht verändert werden sollte (was durch die Transformation geschieht).
„Dinge wie die Flexbox-Sortierung können die Textauswahl völlig verändern, auch wenn visuell alles identisch aussieht.“
Dies könnte ernsthafte Zugänglichkeitsprobleme verursachen, da die Lesereihenfolge geändert wird und, wenn Sie fokussierbare Elemente haben, die Tabulatorreihenfolge von der Lesereihenfolge / Auflistung abweicht (z. B. die Liste der Schaltflächen folgt dem DOM, während die Tabulatorreihenfolge der visuellen Reihenfolge folgt).
Ja, Sie können auch ein Wort doppelklicken, um es auszuwählen.