Jak skopiować tekst do div do schowka? Mam div i muszę dodać link, który doda tekst do schowka. Czy jest na to jakieś rozwiązanie?
<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>
Po kliknięciu skopiuj tekst, a następnie naciśnij Ctrl+ V, należy go wkleić.
Odpowiedzi:
Edytuj od 2016 r
Począwszy od 2016 r. Możesz teraz kopiować tekst do schowka w większości przeglądarek, ponieważ większość przeglądarek ma możliwość programowego kopiowania zaznaczenia tekstu do schowka przy użyciu
document.execCommand("copy")
tej opcji.Podobnie jak w przypadku niektórych innych akcji w przeglądarce (takich jak otwarcie nowego okna), kopiowanie do schowka można wykonać tylko poprzez określoną akcję użytkownika (np. Kliknięcie myszą). Na przykład nie można tego zrobić za pomocą timera.
Oto przykład kodu:
Oto trochę bardziej zaawansowane demo: https://jsfiddle.net/jfriend00/v9g1x0o6/
Możesz także uzyskać gotową bibliotekę, która zrobi to za Ciebie w clipboard.js .
Stara, historyczna część odpowiedzi
Ze względów bezpieczeństwa żadna nowoczesna przeglądarka nie zezwala na bezpośrednie kopiowanie do schowka za pomocą JavaScript. Najczęstszym obejściem jest użycie funkcji Flash do kopiowania do schowka, którą można uruchomić tylko przez bezpośrednie kliknięcie użytkownika.
Jak już wspomniano, ZeroClipboard jest popularnym zestawem kodu do zarządzania obiektem Flash w celu wykonania kopii. Użyłem tego. Jeśli Flash jest zainstalowany na urządzeniu przeglądającym (co wyklucza telefon komórkowy lub tablet), działa.
Kolejnym najczęściej stosowanym obejściem jest po prostu umieszczenie tekstu związanego ze schowkiem w polu wejściowym, przeniesienie fokusa do tego pola i zalecenie użytkownikowi naciśnięcia Ctrl+, Caby skopiować tekst.
Inne dyskusje na temat problemu i możliwe obejścia można znaleźć we wcześniejszych postach przepełnienia stosu:
Jak skopiować do schowka w JavaScript?
Jak skopiować tekst do schowka klienta za pomocą jQuery?
Jak skopiować do schowka bez Flasha?
Te pytania dotyczące nowoczesnej alternatywy dla korzystania z Flasha otrzymały wiele pozytywnych opinii i brak odpowiedzi na rozwiązanie (prawdopodobnie dlatego, że nie istnieje):
Alternatywa HTML5 dla ZeroClipboard opartej na Flashie do bezpiecznego kopiowania danych do schowka?
Skopiuj do schowka bez Flasha
Internet Explorer i Firefox miały niestandardowe interfejsy API do uzyskiwania dostępu do schowka, ale ich nowocześniejsze wersje przestały używać tych metod (prawdopodobnie ze względów bezpieczeństwa).
Pojawiają się nowe standardy próbujące znaleźć „bezpieczny” sposób rozwiązania najczęstszych problemów ze schowkiem (prawdopodobnie wymagający określonej akcji użytkownika, takiej jak wymaga rozwiązanie Flash), i wygląda na to, że może być częściowo wdrożony w najnowszej wersji wersje Firefox i Chrome, ale jeszcze tego nie potwierdziłem.
źródło
document.execCommand("copy")
w wystarczających okolicznościach, aby polegać na tym. Staram się więc aktualizować moją odpowiedź (która została pierwotnie napisana prawie 2 lata temu). Nadal nie mamy niezawodnego rozwiązania dla Safari, innego niż wstępne wybranie tekstu i nakazanie użytkownikowi ręcznego naciśnięcia Ctrl + C, ale przynajmniej postęp jest robiony gdzie indziej.document.execCommand("copy")
więc ten kod powinien teraz działać w Safari 10.Istnieje inny sposób inny niż Flash (oprócz Clipboard API wymienionego w odpowiedzi jfriend00 ). Musisz zaznaczyć tekst, a następnie wykonać polecenie,
copy
aby skopiować do schowka dowolny tekst zaznaczony na stronie.Na przykład ta funkcja skopiuje zawartość przekazanego elementu do schowka (zaktualizowana sugestią w komentarzach PointZeroTwo ):
Tak to działa:
document.execCommand("copy")
.Tutaj możesz zobaczyć szybkie demo:
Główny problem polega na tym, że nie wszystkie przeglądarki obsługują obecnie tę funkcję, ale można jej używać w głównych z:
Aktualizacja 1: Można to osiągnąć również dzięki czystemu rozwiązaniu JavaScript (bez jQuery):
Zauważ, że przekazujemy identyfikator bez numeru # teraz.
Jak poinformował madzohan w komentarzach poniżej, w niektórych przypadkach występuje 64-bitowy problem z 64-bitową wersją przeglądarki Google Chrome (lokalne uruchamianie pliku). Wydaje się, że ten problem został rozwiązany w powyższym rozwiązaniu innym niż jQuery.
Madzohan próbował w Safari i rozwiązanie działało, ale używało
document.execCommand('SelectAll')
zamiast używać.select()
(jak określono na czacie i w komentarzach poniżej).Jak wskazuje PointZeroTwo w komentarzach , kod można ulepszyć, aby zwracał wynik powodzenia / niepowodzenia. Możesz zobaczyć demo na tym jsFiddle .
AKTUALIZACJA: KOPIUJ PRZECHOWYWANIE FORMATU TEKSTU
Jak wskazał użytkownik w hiszpańskiej wersji StackOverflow , powyższe rozwiązania działają idealnie, jeśli chcesz dosłownie skopiować zawartość elementu, ale nie działają tak dobrze, jeśli chcesz wkleić skopiowany tekst w formacie (jako jest kopiowany do
input type="text"
formatu, format jest „utracony”).Rozwiązaniem tego byłoby skopiowanie do edytowalnej zawartości,
div
a następnie skopiowanie jejexecCommand
w podobny sposób. Oto przykład - kliknij przycisk kopiowania, a następnie wklej do pola edycji treści poniżej:W jQuery wyglądałoby to tak:
źródło
aux.style.position = "fixed";
aux.style.top = 0;
powyżejappendChild
połączenia.clipboard.js to ładne narzędzie, które umożliwia kopiowanie tekstu lub danych HTML do schowka bez użycia Flasha. Jest bardzo łatwy w użyciu; po prostu dołącz .js i użyj czegoś takiego:
clipboard.js jest również dostępny na GitHub .
Edytuj w dniu 15 stycznia 2016 r .: Najlepsza odpowiedź została dzisiaj zredagowana, aby odwoływać się do tego samego interfejsu API w mojej odpowiedzi opublikowanej w sierpniu 2015 r. Poprzedni tekst instruował użytkowników, aby korzystali z ZeroClipboard. Chcę tylko wyjaśnić, że nie wyrwałem tego z odpowiedzi jfriend00, a raczej na odwrót.
źródło
Prostota jest szczytem wyrafinowania.
Jeśli nie chcesz, aby tekst do skopiowania był widoczny:
jQuery:
HTML:
źródło
With Line Breaks (rozszerzenie odpowiedzi od Alvaro Montoro)
źródło
Możesz użyć tego kodu do skopiowania wartości wejściowej na stronie w Schowku, klikając przycisk
To jest HTML
Następnie w przypadku tego kodu HTML musimy użyć tego kodu JQuery
To jest najprostsze rozwiązanie tego pytania
źródło
Jeszcze lepsze podejście bez flashowania lub innych wymagań to clipboard.js . Wszystko, co musisz zrobić, to dodać
data-clipboard-target="#toCopyElement"
dowolny przycisk, zainicjować go,new Clipboard('.btn');
a on skopiuje zawartość DOM z identyfikatoremtoCopyElement
do schowka. Jest to fragment, który kopiuje tekst podany w pytaniu za pomocą linku.Jedynym ograniczeniem jest to, że nie działa na safari, ale działa na wszystkich innych przeglądarkach, w tym także na przeglądarkach mobilnych, ponieważ nie używa flasha
źródło
źródło
źródło
.addClass("hidden")
do<input>
tagu, aby nigdy nie pojawiał się w przeglądarce?Bardzo ważne jest, aby pole wejściowe nie miało
display: none
. Przeglądarka nie wybierze tekstu i dlatego nie zostanie skopiowana. Użyjopacity: 0
z szerokością 0px, aby rozwiązać problem.źródło
Jest to najprostsza metoda kopiowania zawartości
źródło
jQuery proste rozwiązanie.
Powinny być uruchamiane przez kliknięcie użytkownika.
źródło
możesz po prostu użyć tej biblioteki, aby łatwo zrealizować cel kopiowania!
https://clipboardjs.com/
lub
https://github.com/zeroclipboard/zeroclipboard
http://zeroclipboard.org/
źródło
Tekst do skopiowania jest wprowadzany tekstem, na przykład:
<input type="text" id="copyText" name="copyText">
a po kliknięciu przycisku powyżej tekst powinien zostać skopiowany do schowka, więc przycisk wygląda tak:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button>
Twój skrypt powinien wyglądać tak:Dla plików CDN
Uwaga :
ZeroClipboard.swf
iZeroClipboard.js
„plik powinien znajdować się w tym samym folderze, w którym znajduje się plik korzystający z tej funkcji, LUB musisz dołączyć, tak jak my umieszczamy<script src=""></script>
na naszych stronach.źródło
Większość proponowanych odpowiedzi tworzy dodatkowe tymczasowe ukryte elementy wejściowe. Ponieważ większość przeglądarek obecnie obsługuje edycję treści div, proponuję rozwiązanie, które nie tworzy ukrytych elementów, nie zachowuje formatowania tekstu i używa czystego JavaScript lub biblioteki jQuery.
Oto minimalistyczna implementacja szkieletu przy użyciu jak najmniejszej liczby wierszy kodów, jakie mogłem wymyślić:
źródło
Biblioteka schowka-wypełniacza jest wypełnieniem dla nowoczesnego interfejsu API schowka asynchronicznego opartego na obietnicy.
zainstaluj w CLI:
importuj jako schowek w pliku JS
przykład
Używam go w pakiecie
require("babel-polyfill");
i przetestowałem na chromie 67. Wszystko dobre do produkcji.źródło
kod HTML tutaj
KOD JS:
źródło
możesz skopiować pojedynczy tekst oprócz tekstu elementu HTML.
źródło
Czysty JS, bez wbudowanego kliknięcia, dla sparowanych klas „treść - przycisk kopiowania”. Byłoby wygodniej, jeśli masz wiele elementów)
Obsługa starszych przeglądarek:
Pokaż fragment kodu
źródło
Oba będą działać jak urok :),
JAVASCRIPT:
Również w html
JQUERY: https://paulund.co.uk/jquery-copy-clipboard
źródło