【发布时间】:2021-04-13 10:29:42
【问题描述】:
如何做到这一点?在 HTML 页面中,有一个带有一些内容的 p 标记(但只有通过 和换行标记
的缩进)。
我想提供两个按钮:一个将 p 标签转换为文本区域,以便用户可以改编现有内容,一个复制内容(如果内容没有被改编,则应复制原始内容,如果改编,当然应该复制改编的代码)。
到目前为止,我已经准备好了下面的代码。最终的功能应该是(大部分在 sn-p 中不起作用/实现;解决方案应该是 JS):
- 点击复制:如果未改编,则复制更改的内容或原始内容
- 点击适配:将p标签变成文本区域,用户可以对文本进行适配
- 文本区域应保留原始格式:缩进和换行,但不应显示 HTML 标记(例如
) - 当点击复制后复制改编的内容时,文本区域应该消失,并且应该重新显示原始内容(原来的p标签,而不是文本区域),即所有更改都应该恢复
- 当单击 Adapt 然后再次单击 Adapt 时,所有更改都应还原并再次显示原始 p(否则,文本区域在页面重新加载之前不会消失)。思路:当 Adapt 按钮被点击时,按钮的名称应该变成类似“Revert”的名称,点击“Revert”后,原来的 p 和“Adapt”按钮可以再次显示。
- 如何首先放置复制按钮,然后将调整按钮放置在它旁边?那么如何引用 p 标签呢?它必须在没有预定义 ID 的情况下工作。
还有什么想法吗?谢谢!
<button onclick="edit(this)">Adapt</button>
<p>some text 1<br> some text 2<br> some text 3 some text 4 && .... <br> ..... <br> ...... <br> ...... <br>...... <br><br></p>
<button title="Copy to clipboard" onclick="copy_text(this)">Copy</button>
<script>
function edit(item) {
var a = item.nextElementSibling;
a.outerHTML = a.outerHTML.replace(/<p>/g, '<textarea style="width: 100%; height: 100px ">').replace(/<\/p>/g, '</textarea>');
}
</script>
<script>
function copy_text(item) {
const str = item.previousElementSibling.innerText;
const el = document.createElement("textarea");
el.value = str;
el.setAttribute("readonly", "");
el.style.position = "absolute";
el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
};
</script>
【问题讨论】:
标签: javascript replace textarea clipboard