【发布时间】:2016-03-05 20:50:33
【问题描述】:
将剪贴板中的数据粘贴到 html 文本区域时,它会进行一些非常酷的解析,以使粘贴看起来接近于换行符所复制的内容。
例如,我在我选择的页面上有以下 html(所有内容都以蓝色突出显示),然后我 copy它:
Hello
<br>
<br>
<br>
<div>more</div>
<div>last</div>
所以要清楚,我要复制的是this jsfiddle 的输出。
现在,当我将这个神奇的复制文本粘贴到文本区域时,我看到的正是我所期望的:"Hello", empty line, empty line, empty line, "more", "last"。凉爽的!然后,当我在 textarea 上使用 jQuery 的 .val() 时,我得到"Hello\n\n\nmore\nlast"。超酷。它采用了br 和div 并能够从中推断出正确的换行符。
现在...
我正在尝试以编程方式获取我之前复制的相同数据并将其设置为 textarea 的值,就像它被粘贴一样。
这是我尝试过的......
所以,假设我之前复制的内容被包裹在 <div id="parent">...</div> 中。
var parent = $("#parent");
var textarea = $("#theTextArea");
// Set the value of the text area to be the html of the thing I care about
textarea.val(parent.html());
现在我知道这与复制粘贴不同,但我希望它会照顾我并做我想做的事。它没有。文本区域被Hello<br><br><br><div>more</div><div>last</div> 填充。曾经不可见的 html 现在被字符串化并成为文本的一部分。
显然我做错了。 .html() 当然返回 html 字符串。但是有什么我可以打电话给parent 的东西,它会给我带有所有推断换行符的文本吗?我试过打电话给parent.text(),但这只会给Hellomorelast(没有换行符)。
一些可以帮助回答的注释:我正在使用 Angular,所以我可以访问他们所有的好东西和 jQuery。
【问题讨论】:
-
当您复制一些文本(浏览器/pdf/word)时,它有两种类型的值:文本和原始数据。当 textarea 从剪贴板接受文本时,它会使用文本而不是原始数据。我认为您需要查看具有 contenteditable 属性的元素,如果它是 xml(如 hmtl)
-
感谢@Epsil0neR。实际上,这样做的全部原因是我有一个可内容编辑的 div 作为用户输入。我需要处理某些元素并用文本替换,但我想要的其余元素消失(api 不接受 html 标记)。所以我想从 contenteditable div 转换和
的最简单方法是以编程方式将它们全部放入 textarea 中,然后从那里获取数据。
标签: javascript html