【问题标题】:Simulate paste into Textarea with javascript使用 javascript 模拟粘贴到 Textarea
【发布时间】: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"。超酷。它采用了brdiv 并能够从中推断出正确的换行符。

现在...

我正在尝试以编程方式获取我之前复制的相同数据并将其设置为 textarea 的值,就像它被粘贴一样。

这是我尝试过的......

所以,假设我之前复制的内容被包裹在 &lt;div id="parent"&gt;...&lt;/div&gt; 中。

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&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;more&lt;/div&gt;&lt;div&gt;last&lt;/div&gt; 填充。曾经不可见的 html 现在被字符串化并成为文本的一部分。

显然我做错了。 .html() 当然返回 html 字符串。但是有什么我可以打电话给parent 的东西,它会给我带有所有推断换行符的文本吗?我试过打电话给parent.text(),但这只会给Hellomorelast(没有换行符)。

一些可以帮助回答的注释:我正在使用 Angular,所以我可以访问他们所有的好东西和 jQuery。

【问题讨论】:

  • 当您复制一些文本(浏览器/pdf/word)时,它有两种类型的值:文本和原始数据。当 textarea 从剪贴板接受文本时,它会使用文本而不是原始数据。我认为您需要查看具有 contenteditable 属性的元素,如果它是 xml(如 hmtl)
  • 感谢@Epsil0neR。实际上,这样做的全部原因是我有一个可内容编辑的 div 作为用户输入。我需要处理某些元素并用文本替换,但我想要的其余元素消失(api 不接受 html 标记)。所以我想从 contenteditable div 转换

    的最简单方法是以编程方式将它们全部放入 textarea 中,然后从那里获取数据。

标签: javascript html


【解决方案1】:

编辑:

Solution



这不太好,但你可以尝试用换行符'\n'替换html标签,或者在html文件中做一些换行符,然后用text()获取内容。

var parent1 = $("#paren1");
var textarea1 = $("#theTextArea1");

var parent2 = $("#paren2");
var textarea2 = $("#theTextArea2");

// Set the value of the text area to be the html of the thing I care about
var text = parent1.html();
text = text.replace(new RegExp("<br>", 'g'),"\n");
text = text.replace(new RegExp("<div>", 'g'),"");
text = text.replace(new RegExp("</div>", 'g'),"\n");
textarea1.val(text);

textarea2.val(parent2.text());

JSFiddle

【讨论】:

  • 感谢您的建议!但这有一些缺陷。例如,如果我有几个嵌套的divs,并且只有最深的一个有内容,它应该看起来好像只有 1 个换行符。您的方法是假设每个 div 都会导致换行符。
  • 也许这就是你要找的东西stackoverflow.com/questions/3813167/…
  • 是的!这就对了!完美运行。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2012-08-25
  • 1970-01-01
相关资源
最近更新 更多