我有一些非常基本的Javascript,只需按一下按钮即可复制文本。我的问题是它不会保留换行符:
<script>
function copyToClipboard(element) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val($(element).text()).select();
document.execCommand("copy");
$temp.remove();
}
</script>
我真的希望能够添加到上面的脚本中,以避免在网站上进行大量更改。
我在其他帖子上看过的内容如:
post.innerHTML = post.innerHTML.replace(/\n/g, '<br>\n');
理论上它可以工作(我认为),但我吮吸Javascript。
有什么建议吗?
由于
答案 0 :(得分:13)
首先,<input>
元素不会保留换行符。您可以改用<textarea>
元素。由于您的HTML可能包含<br>
个元素而不是换行符,因此我还建议您使用jQuery在每个\r\n
之前添加<br>
。
function copyToClipboard(element) {
var text = $(element).clone().find('br').prepend('\r\n').end().text()
element = $('<textarea>').appendTo('body').val(text).select()
document.execCommand('copy')
element.remove()
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p contenteditable="true">Type to edit <br> this text</p>
<button onclick="copyToClipboard('p')">Copy to Clipboard</button>
&#13;
答案 1 :(得分:0)
我们已经调整了copyToClipboard函数以使其与我们的应用程序一起使用。变化如下:
<b>
和<br>
标记,因此简单的正则表达式应该可以工作,并且还可以处理可能存在的奇数标记。这是我们改编的功能,以及评论:
// Note: original replace used to strip HTML tags from https://stackoverflow.com/questions/5002111/javascript-how-to-strip-html-tags-from-string ReactiveRaven.
// However, replaced closing (>|$) with > as I don't understand why the check for $ is there, as it implies that $ is part of an HTML tag.
// Our requirement highly constrains the HTML, to mainly have <br> and <b> tags, so the general objection to parsing HTML with regex
// as at https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags community wiki is not applicable.
// BTW, that page is very entertaining!
function copyToClipboard(element)
{
var $temp = $("<textarea>");
$("body").append($temp);
var x = $(element).html().trim().replace(/<br>/g, '\n').replace(/<\/?[^>]+>/g, '');
$temp.val(x).select();
document.execCommand("copy");
$temp.remove();
}
顺便说一句,如果有人知道为什么引用页面中的正则表达式具有我们更改为&gt;的(&gt; | $),我们希望获得理解为什么我们删除的美元符号是必需的。