My requirement: When user copy some content from my web page, with text some HTML tags and carriage retun also gets copied. I need to modify the copied content in clipboard i.e. removing carriage retunn and HTML tags.
What I have tried so far: I have captured the copy even using jQuery and get the content of clipboard. See below code.
$(document).bind('copy', function () {
//getting clipboard content
var selectedText = window.getSelection().toString();
//removing carriage retun from content
selectedText = selectedText.replace(/<\/?[^>]+(>|$)/g, "");
//Trying to set data in clipboard
window.clipboardData.setData(selectedText); //Throws error
}
Now, when I tried to setData in clipboard using window.clipboardData.setData(selectedText);
, it throws error.
Questions:
1) Am I using the correct function i.e. setData()
to modify the clipbard content or not?
2) Can somebody let me know how can I modify the content of clipboard here?
To resolve this issue what I have done on
copy
event I have bind a function i.e.copyToClipboard
which creates atextarea
at run time, copy modified clipboard data to this text area and then execute a 'CUT' command (to avoid recursive call on copy event). And finally deleting textarea element in finally block.Code:
There are two things I can find out.
e
passed not inwindow
.For further reference copy Event MDN
Bind the element id with copy event and then get the selected text. You could replace or modify the text. Get the clipboard and set the new text. To get the exact formatting you need to set the type as "text/hmtl". You may also bind it to the document instead of element.
The currently accepted answer is overly complicated, and causes weird behavior where a user's selection is removed after copy.
Here is a much simpler solution: