577

How do I copy the text inside a div to the clipboard? I have a div and need to add a link which will add the text to the clipboard. Is there a solution for this?

<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>

After I click copy text, then I press Ctrl + V, it must be pasted.

mplungjan
180k29 gold badges183 silver badges246 bronze badges
asked Mar 22, 2014 at 17:53
10
  • Refer to stackoverflow.com/questions/400212/… Commented Mar 22, 2014 at 17:55
  • Trello has a clever way to do this without flash: stackoverflow.com/questions/17527870/… Commented Oct 30, 2014 at 15:37
  • Refer this, stackoverflow.com/questions/22581345/… got expected solution using Pure JavaScript Commented Jun 17, 2016 at 10:14
  • 1
    @MichaelScheper - some users are even smart enough to notice that my comment, and most of the answers here, were posted over four years ago, when zeroclipboard, which is based on a small flash app, was the only cross-browser viable option to work with the clipboard, and the goto solution. Today all modern browsers support this natively, so it's no longer an issue, but that wasn't the case in 2014 Commented May 24, 2018 at 6:02
  • 1
    @MichaelScheper - your comment didn't come across as overly critical, it came across as completely misplaced and condescending. Commenting "Seriously no ... flash is evil, users know better .." four years later, seems completely redundant, we all know noone uses flash anymore, it's not supported on all platforms etc, and the answers below are updated to reflect that. However, when those answers, and my comment was first posted, flash was the only viable answer to this question, and as such my comment stands, if only for historical purposes. There's absolutely no need to remove it, Commented Jun 9, 2018 at 19:34

33 Answers 33

1
2
866
+150

Update 2020: This solution uses execCommand. While that feature was fine at the moment of writing this answer, it is now considered obsolete. It will still work on many browsers, but its use is discouraged as support may be dropped.

There is another non-Flash way (apart from the Clipboard API mentioned in jfriend00's answer). You need to select the text and then execute the command copy to copy to the clipboard whatever text is currently selected on the page.

For example, this function will copy the content of the passed element into the clipboard (updated with suggestion in the comments from PointZeroTwo):

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

This is how it works:

  1. Creates a temporarily hidden text field.
  2. Copies the content of the element to that text field.
  3. Selects the content of the text field.
  4. Executes the command copy like: document.execCommand("copy").
  5. Removes the temporary text field.

NOTE that the inner text of the element can contain whitespace. So if you want to use if for example for passwords you may trim the text by using $(element).text().trim() in the code above.

You can see a quick demo here:

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" />

The main issue is that not all browsers support this feature at the moment, but you can use it on the main ones from:

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

Update 1: This can be achieved also with a pure JavaScript solution (no 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" />

Notice that we pass the id without the # now.

As madzohan reported in the comments below, there is some strange issue with the 64-bit version of Google Chrome in some cases (running the file locally). This issue seems to be fixed with the non-jQuery solution above.

Madzohan tried in Safari and the solution worked but using document.execCommand('SelectAll') instead of using .select() (as specified in the chat and in the comments below).

As PointZeroTwo points out in the comments, the code could be improved so it would return a success/failure result. You can see a demo on this jsFiddle.


UPDATE: COPY KEEPING THE TEXT FORMAT

As a user pointed out in the Spanish version of StackOverflow, the solutions listed above work perfectly if you want to copy the content of an element literally, but they don't work that great if you want to paste the copied text with format (as it is copied into an input type="text", the format is "lost").

A solution for that would be to copy into a content editable div and then copy it using the execCommand in a similar way. Here there is an example - click on the copy button and then paste into the content editable box below:

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>

And in jQuery, it would be like this:

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>

Ehsan88
3,8415 gold badges33 silver badges55 bronze badges
answered Jun 18, 2015 at 1:56
Sign up to request clarification or add additional context in comments.

36 Comments

strange ... here it works, but I cannot get to work it locally 0o jquery-1.11.3 Chrome 43.0.2357.130 (64-bit)
@madzohan Ok, I was able to reproduce the issue. It is weird because I was only able to reproduce it on local (file://) on 64-bit Chrome. I also found a quick solution that works for me: using plain JavaScript instead of jQuery. I will update the answer with that code. Please check it and let me know if it works for you.
FWIW - document.execCommand("copy") returns a boolean (IE, Chrome, Safari) indicating whether the copy was successful. It could be used to display an error message on failure. Firefox throws an exception on failure (in v39 at least), requiring a try/catch to handle the error.
This didn't work for me until I made sure that aux was visible on the page by adding the following lines: aux.style.position = "fixed"; aux.style.top = 0; above the appendChild call.
The original jQuery implementation fails to preserve line breaks, because it is using an INPUT element. Using a TEXTAREA instead solves this.
|
518

Edit as of 2016

As of 2016, you can now copy text to the clipboard in most browsers because most browsers have the ability to programmatically copy a selection of text to the clipboard using document.execCommand("copy") that works off a selection.

As with some other actions in a browser (like opening a new window), the copy to clipboard can only be done via a specific user action (like a mouse click). For example, it cannot be done via a timer.

Here's a code example:

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">


Here's a little more advanced demo: https://jsfiddle.net/jfriend00/v9g1x0o6/

And, you can also get a pre-built library that does this for you with clipboard.js.


Old, historical part of answer

Directly copying to the clipboard via JavaScript is not permitted by any modern browser for security reasons. The most common workaround is to use a Flash capability for copying to the clipboard that can only be triggered by a direct user click.

As mentioned already, ZeroClipboard is a popular set of code for managing the Flash object to do the copy. I've used it. If Flash is installed on the browsing device (which rules out mobile or tablet), it works.


The next most common work-around is to just place the clipboard-bound text into an input field, move the focus to that field and advise the user to press Ctrl + C to copy the text.

Other discussions of the issue and possible work-arounds can be found in these prior Stack Overflow posts:


These questions asking for a modern alternative to using Flash have received lots of question upvotes and no answers with a solution (probably because none exist):


Internet Explorer and Firefox used to have non-standard APIs for accessing the clipboard, but their more modern versions have deprecated those methods (probably for security reasons).


There is a nascent standards effort to try to come up with a "safe" way to solve the most common clipboard problems (probably requiring a specific user action like the Flash solution requires), and it looks like it may be partially implemented in the latest versions of Firefox and Chrome, but I haven't confirmed that yet.

answered Mar 22, 2014 at 17:56

18 Comments

clipboard.js was just added to this edited post. It's a good utility that I included as an answer to this question in August 2015.
@acoder - Clipboard support has been changing regularly. For example, Firefox only recently (late 2015) enabled document.execCommand("copy") in enough circumstances to rely on using it for this. So, I am endeavoring to keep my answer up to date (which was originally authored almost 2 years ago). We still do not yet have a reliable solution for Safari other than pre-selecting the text and telling the user to manually press Ctrl+C, but at least progress is being made elsewhere.
Here is a link to support for the Clipboard APIs: caniuse.com/#feat=clipboard
FYI, per this set of Safari release notes, it appears that Safari 10 does now support document.execCommand("copy") so this code should now work in Safari 10.
@sebastiangodelet - public domain.
|
100

Feb 2024

As of 2024, you should use the Clipboard Api.

navigator.clipboard.writeText('text here you want to copy').then(function () {
 alert('It worked! Do a CTRL - V to paste')
}, function () {
 alert('Failure to copy. Check permissions for clipboard')
});

Here is more info about interacting with the clipboard

answered Sep 21, 2020 at 21:18

1 Comment

With jquery you can add to any html element this code: onclick="navigator.clipboard.writeText($(this).text());"
66

June 2022

Update: The correct way to do it nowadays is with the Clipboard API.

For Example:

// get the text from the DOM Element: 
const textToCopy = document.querySelector('.content').innerText
// when someone clicks on the <a class="copy-text"> element 
// (which should be a <button>), execute the copy command:
document.querySelector('.copy-text').addEventListener('click' , ()=> {
 navigator.clipboard.writeText(textToCopy).then(
 function() {
 /* clipboard successfully set */
 window.alert('Success! The text was copied to your clipboard') 
 }, 
 function() {
 /* clipboard write failed */
 window.alert('Opps! Your browser does not support the Clipboard API')
 }
 )
})

That's it.



If you want to take a look at the solution before the Clipboard API was introduced (not a good practice for nowadays):

$('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;" />
answered Mar 7, 2018 at 10:45

3 Comments

doesn’t seem to work on ipad, haven’t tested but a suggested solution is here: stackoverflow.com/a/34046084
That worked for me, but if the text to be copied contains carriage returns then you can just as well use a textarea instead.
If the clipboard API is unavailable, localhost for example, your arror message is inaccessible
37

clipboard.js is a nice utility that allows copying of text or HTML data to the clipboard without use of Flash. It's very easy to use; just include the .js and use something like this:

<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 is also on GitHub.

Edit on Jan 15, 2016: The top answer was edited today to reference the same API in my answer posted in August 2015. The previous text was instructing users to use ZeroClipboard. Just want to be clear that I didn't yank this from jfriend00's answer, rather the other way around.

answered Aug 11, 2015 at 15:29

1 Comment

clipboard-js - has been deprecated Author message: Please migrate to github.com/lgarron/clipboard-polyfill
18

With Line Breaks (Extention of the Answer from 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());
answered Jan 9, 2017 at 10:32

Comments

14

Even better approach without flash or any other requirements is clipboard.js. All you need to do is add data-clipboard-target="#toCopyElement" on any button, initialize it new Clipboard('.btn'); and it will copy the content of DOM with id toCopyElement to clipboard. This is a snippet that copy the text provided in your question via a link.

One limitation though is that it does not work on safari, but it works on all other browser including mobile browsers as it does not use 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>

answered Jul 23, 2016 at 10:34

Comments

10
<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();
}
MD. Khairul Basar
5,11015 gold badges43 silver badges65 bronze badges
answered Oct 30, 2017 at 6:16

1 Comment

Nice workaround. Maybe add .addClass("hidden") to the <input> tag to have it never shown up in browser?
8

jQuery simple solution.

Should be triggered by user's click.

$("<textarea/>").appendTo("body").val(text).select().each(function () {
 document.execCommand('copy');
 }).remove();
answered Feb 23, 2018 at 12:37

Comments

6

You can use this code for copy input value in page in Clipboard by click a button

This is 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>

Then for this html , we must use this JQuery Code

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

This is the simplest solution for this question

answered Apr 29, 2019 at 12:41

Comments

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>
answered Jan 17, 2016 at 5:25

1 Comment

This can be only used for Textarea and textbox.
5

It's very important that the input field does not have display: none. The browser will not select the text and therefore will not be copied. Use opacity: 0 with a width of 0px to fix the problem.

david
3,2289 gold badges33 silver badges43 bronze badges
answered Dec 12, 2018 at 21:54

Comments

5
<p style="color:wheat;font-size:55px;text-align:center;">How to copy a TEXT to Clipboard on a Button-Click</p>
 
 <center>
 <p id="p1">Hello, I'm TEXT 1</p>
 <p id="p2">Hi, I'm the 2nd TEXT</p><br/>
 
 <button onclick="copyToClipboard('#p1')">Copy TEXT 1</button>
 <button onclick="copyToClipboard('#p2')">Copy TEXT 2</button>
 
 </center>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
<script>
 function copyToClipboard(element) {
 var $temp = $("<input>");
 $("body").append($temp);
 $temp.val($(element).text()).select();
 document.execCommand("copy");
 $temp.remove();
 }
</script>
answered May 26, 2021 at 11:08

Comments

4

It is a simplest method to copy the content

 <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'));
 });
answered Jan 13, 2016 at 9:36

Comments

3

Most of the proposed answers create an extra temporary hidden input element(s). Because most browsers nowadays support div content edit, I propose a solution that does not create hidden element(s), preserve text formatting and use pure JavaScript or jQuery library.

Here is a minimalist skeleton implementation using the fewest lines of codes I could think of:

//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>

answered Apr 3, 2018 at 15:52

Comments

3

Pure JS, without inline onclick, for paired classes "content - copy button". Would be more comfortable, if you have many elements)

(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>

Older browser support:

(function(){
var area = document.createElement('textarea');
document.body.appendChild( area );
area.style.display = "none";
var content = document.querySelectorAll('.js-content');
var copy = document.querySelectorAll('.js-copy');
for( var i = 0; i < copy.length; i++ ){
 copyOnClick(i);
}
function copyOnClick(i){
 copy[i].addEventListener('click', function(){
 area.style.display = "block";
 area.value = content[i].innerText;
 area.select();
 document.execCommand('copy'); 
 area.style.display = "none";
 
 var t = this;
 t.innerHTML = 'Cop<span style="color: red;">ied</span>';
 setTimeout( function(){
 t.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>

answered Sep 5, 2019 at 7:25

Comments

2

The text to copy is in text input,like: <input type="text" id="copyText" name="copyText"> and, on button click above text should get copied to clipboard,so button is like:<button type="submit" id="copy_button" data-clipboard-target='copyText'>Copy</button> Your script should be like:

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

For CDN files

note: ZeroClipboard.swf and ZeroClipboard.js" file should be in the same folder as your file using this functionality is, OR you have to include like we include <script src=""></script> on our pages.

Suhaib Janjua
3,58016 gold badges69 silver badges87 bronze badges
answered Apr 4, 2015 at 8:37

1 Comment

Flash is going the way of Geocities.
2

you can just using this lib for easy realize the copy goal!

https://clipboardjs.com/

Copying text to the clipboard shouldn't be hard. It shouldn't require dozens of steps to configure or hundreds of KBs to load. But most of all, it shouldn't depend on Flash or any bloated framework.

That's why clipboard.js exists.

or

https://github.com/zeroclipboard/zeroclipboard

http://zeroclipboard.org/

The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.

answered Dec 4, 2016 at 21:44

Comments

2

Clipboard-polyfill library is a polyfill for the modern Promise-based asynchronous clipboard API.

install in CLI:

npm install clipboard-polyfill 

import as clipboard in JS file

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

example

I'm using it in a bundle with require("babel-polyfill"); and tested it on chrome 67. All good for production.

answered Jun 25, 2018 at 3:52

Comments

2

you can copy an individual text apart from an HTML element's text.

 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();
 }
 };
answered Mar 19, 2019 at 8:56

Comments

1

html code here

 <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" />

JS CODE:

 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);
 }
answered Jul 4, 2016 at 15:28

2 Comments

change this: .value to .innerHTML
.innerText if you want copy text only
1
function copyToClipboard(element) {
 var $temp = $("<input>");
 $("body").append($temp);
 $temp.val($('span[id='+element+']').text()).select();
 document.execCommand("copy");
 $temp.remove();
}
answered Jun 15, 2022 at 0:33

1 Comment

While this code block may answer the OP's question, this answer would be much more useful if you explain how this code is different from the code in the question, what you've changed, why you've changed it and why that solves the problem without introducing others. please read How do I write a good answer?
1

Why don't you just use this code, I don't understand ?

navigator.clipboard.writeText('text here...');
answered Jul 25, 2022 at 5:44

1 Comment

The OPs question is from 2014 when this probably was not available yet. Anyway, the newer/updated answers recommend to do so.
1

Here is an elegant Javascript solution

<input type="text" value="Foo Bar" id="your_input">
<button onclick="copy()">Copy text</button>
<script type="application/javascript">
function copy() {
 var copiedtext = document.getElementById("your_input");
 copiedtext.select();
 copiedtext.setSelectionRange(0, 99999); //for mobile devices
 navigator.clipboard.writeText(copiedtext.value);
 alert("You just copied " + copiedtext.value);
}
</script>
answered Nov 11, 2022 at 12:51

Comments

0

I was doing it just now and I just wanted to know if there was a better way than mine, but no.

You can use my code, it copies the text and shows a tooltip.

Head

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/fonts/remixicon.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Body

<div class="alert alert-primary alert-dismissible mb-0 py-1" role="alert" id="liveAlert">
 <div class="container d-flex justify-content-between">
 <button type="button" class=" btn align-self-center ms-4 copytext" data-bs-toggle="tooltip" data-bs-placement="top" title=""><strong>Good news!</strong> You just got 10% off, use your coupon <span class="fw-bold bg-secondary text-white px-2 maintext">store10off</span>. <i class="ri-file-copy-line"></i></button>
 <button type="button" class="btn align-self-center" data-bs-dismiss="alert" aria-label="Close"><strong class="fw-bold fs-4"><i class="ri-close-fill"></i></strong></button>
 </div>
 </div>

Function

<script>
 $('.copytext').click(function(){
 var thistooltip = $(this);
 var thistext = $(this).children('.maintext').text();
 navigator.clipboard.writeText(thistext);
 $(this).attr('title','copied');
 setTimeout(function(){$(thistooltip).tooltip("toggle");}, 800);
 });
</script>
answered Aug 23, 2021 at 14:46

Comments

0

Very simple. You must be searching for the js navigator.clipboard.writeText("thistext");
This will simply copy the text "thistext". Now to get it working on click, use the jquery onclick function and store the value (the text you want to copy) in a string (if you need then you can use DOM as well to get a value from the page as well) and use this line of copy and instead of "thistext", pass the variable!

Dharman
34k27 gold badges105 silver badges156 bronze badges
answered Sep 1, 2021 at 20:55

Comments

0
 document.getElementById('markup-copy').addEventListener('click', function() {
 var txt = "Your text Here";
 $("<textarea/>").appendTo("body").val(txt).select().each(function () {
 document.execCommand('copy');
 }).remove();
 });
answered Feb 1, 2022 at 14:01

Comments

0

A combination of multiple answers is below. This will preserve newlines correctly.

// Copies a value to the clipboard
 window.copyToClipboard = function(value) {
 // navigator clipboard api needs a secure context (https)
 if (navigator.clipboard && window.isSecureContext) {
 // navigator clipboard api method
 return navigator.clipboard.writeText(value).then(function () {
 //alert('It worked! Do a CTRL - V to paste')
 }, function () {
 alert('Error while copying to clipboard.')
 });
 } else {
 // text area method
 let textArea = document.createElement("textarea");
 textArea.value = value;
 // make the textarea out of viewport
 textArea.style.position = "fixed";
 textArea.style.left = "-999999px";
 textArea.style.top = "-999999px";
 document.body.appendChild(textArea);
 textArea.focus();
 textArea.select();
 document.execCommand('copy');
 textArea.remove();
 }
 }
answered Mar 24, 2022 at 8:42

Comments

0

Plain JS + More compatibility

function copyToClipboard(e) {
 selectText(e);
 document.execCommand("copy");
}
function selectText(e) {
 e = document.getElementById(e);
 if (document.body.createTextRange) {
 const r = document.body.createTextRange();
 r.moveToElementText(e);
 r.select();
 } else if (window.getSelection) {
 const s = window.getSelection();
 const r = document.createRange();
 r.selectNodeContents(e);
 s.removeAllRanges();
 s.addRange(r);
 } else {
 console.warn("Could not select text in "+e+": Unsupported browser.");
 }
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
<span style="border: 1px dotted gray;padding:10px 5px">
<strong style="font-size: 25px; margin-right: 10px" id="clipboard-text">С2Н5ОН</strong> 
<button onclick="copyToClipboard('clipboard-text')"><i class="fa fa-clipboard"></i></button>
</span>
<p><input placeholder="paste me here" value="" type="text"><p>

answered Apr 16, 2022 at 23:50

Comments

0

HTML:

// you need bootstrap(js && css) and JQuery(js)
<span class="text-copy" value="your-text">text</span>

CSS:

.text-copy {
 cursor: pointer;
 color: #0d6efd;
 text-decoration: underline;
}
.text-copy:hover {
 color: #1b6be4;
}

JS (using JQuery):

$(document).ready(function() {
 var elements = $('.copy-text');
 for(let i = 0; i < elements.length; i++) {
 const element = $(elements[i]);
 element.attr('data-toggle', 'tooltip')
 .attr('data-placement', 'top')
 .attr('title', `Tab to copy "${element.attr('value')}"`);
 }
 $('[data-toggle="tooltip"]').tooltip();
 $('.text-copy').click(function() {
 var $temp = $("<input>");
 $("body").append($temp);
 $temp.val($(this).attr('value')).select();
 document.execCommand("copy");
 $temp.remove();
 });
});

$(document).ready(async function() {
 var elements = $('.text-copy');
 for(let i = 0; i<elements.length; i++) {
 const element = $(elements[i]);
 element.attr('data-toggle', 'tooltip')
 .attr('data-placement', 'top')
 .attr('title', `Tab to copy "${element.attr('value')}"`);
 }
 $('[data-toggle="tooltip"]').tooltip();
 $('.text-copy').click(function() {
 var $temp = $("<input>");
 $("body").append($temp);
 $temp.val($(this).attr('value')).select();
 document.execCommand("copy");
 $temp.remove();
 });
});
body {
 display: grid;
 justify-content: center;
}
.text-copy {
 cursor: pointer;
 color: #0d6efd;
 text-decoration: underline;
}
.text-copy:hover {
 color: #1b6be4;
}
<html>
 <head>
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
 </head>
 <body>
 <h2 class="text-copy" value="your copy text">your text</h2>
 <br>
 <h4>paste here</h4>
 <input type="text">
 </body>
</html>

answered Jul 1, 2022 at 15:46

Comments

1
2

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.