Copy To Clipboard With Break Line
Answer :
You have a few problems with the code.
First problem in your code is the $(element).text()
jquery text() strips your code from html including the <br>
tags. So there is no newlines in the clipboard text since all html newlines are stripped away.. so nothing to replace.
If you want to keep <br>
as newlines you need to use .html()
and parse your text more manually.
Second problem is that you use <input>
tag. <input>
tag is only single lines so u cant have any newline in there. you need to use <textarea>
for the conversion.
The last problem is as above that you also should use \r\n
for windows users.
I updated your snippet with a working version.
function copyToClipboard(element) {
var $temp = $("<textarea>");
var brRegex = /<br\s*[\/]?>/gi;
$("body").append($temp);
$temp.val($(element).html().replace(brRegex, "\r\n")).select();
document.execCommand("copy");
$temp.remove();
}
$( "#FailCopy" ).click(function() {
alert("Well done! div #error-details has been copy to your clipboard, now paste it in the notepad or email!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!--text that i want to copy-->
<h2>Div #error-details: the text I want to copy to clipboard:</h2>
<er id="error-details">Name: test<br>Surname: test<br>Email: test@gmail.com<br>Address: test<br>City: test<br>Country: null<br>Ad Category: test<br>Plan: null<br>Website: <br>Company name: test<br>Μήνυμα: test</er>
<br><br>
<button id="FailCopy" type="button"
onclick="copyToClipboard('er#error-details')">Copy div to clipboard</button>
Non-jQuery Solution to simply copy a string with line breaks to clipboard
Please refer to code comments for clarity.
function copyStringWithNewLineToClipBoard(stringWithNewLines){
// Step 1: create a textarea element.
// It is capable of holding linebreaks (newlines) unlike "input" element
const myFluffyTextarea = document.createElement('textarea');
// Step 2: Store your string in innerHTML of myFluffyTextarea element
myFluffyTextarea.innerHTML = stringWithNewLines;
// Step3: find an id element within the body to append your myFluffyTextarea there temporarily
const parentElement = document.getElementById('any-id-within-any-body-element');
parentElement.appendChild(myFluffyTextarea);
// Step 4: Simulate selection of your text from myFluffyTextarea programmatically
myFluffyTextarea.select();
// Step 5: simulate copy command (ctrl+c)
// now your string with newlines should be copied to your clipboard
document.execCommand('copy');
// Step 6: Now you can get rid of your fluffy textarea element
parentElement.removeChild(myFluffyTextarea);
}
Two things are wrong:
(1) According to the jquery documentation for text:
The result of the .text() method is a string containing the combined text of all matched elements. (Due to variations in the HTML parsers in different browsers, the text returned may vary in newlines and other white space.)
And their example,
<div class="demo-container">
<div class="demo-box">Demonstration Box</div>
<ul>
<li>list item 1</li>
<li>list <strong>item</strong> 2</li>
</ul>
</div>
The code $( "div.demo-container" ).text()
will produce:
Demonstration Box list item 1 list item 2
So just use the html()
method instead to fetch the innerHTML
.
(2) The <input>
tag removes newlines. Use textarea
instead. See: this answer for more info.
Hopefully this spinet will work.
function copyToClipboard(element) {
var $temp = $("<textarea>");
$("body").append($temp);
var html = $(element).html();
html = html.replace(/<br>/g, "\n"); // or \r\n
console.log(html);
$temp.val(html).select();
document.execCommand("copy");
$temp.remove();
}
$( "#FailCopy" ).click(function() {
alert("Well done! div #error-details has been copy to your clipboard, now paste it in the notepad or email!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!--text that i want to copy-->
<h2>Div #error-details: the text I want to copy to clipboard:</h2>
<er id="error-details">Name: test<br>Surname: test<br>Email: test@gmail.com<br>Address: test<br>City: test<br>Country: null<br>Ad Category: test<br>Plan: null<br>Website: <br>Company name: test<br>Μήνυμα: test</er>
<br><br>
<button id="FailCopy" type="button"
onclick="copyToClipboard('er#error-details')">Copy div to clipboard</button>
Comments
Post a Comment