![]() |
1
134
在写下这个答案后情况发生了变化:既然火狐在版本22中增加了支持,所有主要的浏览器现在都支持在粘贴事件中访问剪贴板数据。见 Nico Burns's answer 举个例子。
在过去,这通常不可能以跨浏览器的方式实现。理想情况是能够通过
当你需要支持老版本的浏览器时,你所能做的就是参与其中,并且有一点黑客行为可以在firefox 2+、ie 5.5+和webkit浏览器(如safari或chrome)中使用。Tinymce和Keckeditor的最新版本都使用此技术:
请注意,这只适用于键盘粘贴事件,而不是从上下文或编辑菜单粘贴。当粘贴事件触发时,将插入符号重定向到文本区域(至少在某些浏览器中)为时已晚。 如果您不太可能需要支持firefox 2,请注意,您需要将文本区域放在父文档中,而不是将wysiwyg编辑器iframe的文档放在该浏览器中。 |
![]() |
2
276
解决方案1(纯文本,需要Firefox 22+)适用于IE6+、FF 22+、Chrome、Safari、Edge (仅在IE9+中测试,但应适用于较低版本) 如果您需要支持粘贴HTML或Firefox<=22,请参阅解决方案2。 HTML
JavaScript
JSFiddle: https://jsfiddle.net/swL8ftLs/12/
请注意,此解决方案使用参数“text”作为
解决方案2(HTML,适用于Firefox<=22)在IE6+、FF 3.5+、Chrome、Safari、Edge中测试 HTML
JavaScript
JSFiddle: https://jsfiddle.net/nicoburns/wrqmuabo/23/ 解释
这个
请参阅下面的参考资料部分。
这个
此函数有两个分支。
第一个检查是否存在
如果不支持此方法(所有其他浏览器),则我们
这个
此函数首先对粘贴的数据进行轮询(每20毫秒一次),这是必需的,因为它不会直接显示出来。当数据出现时:
这个
使用粘贴的数据执行任意操作。在这种情况下,我们只是提醒数据,您可以做任何您喜欢的事情。您可能希望通过某种数据消毒过程来运行粘贴的数据。 保存和恢复光标位置 在实际情况下,您可能希望先保存选择,然后再恢复选择。( Set cursor position on contentEditable <div> )然后可以在用户启动粘贴操作时光标所在的位置插入粘贴的数据。 资源:
感谢蒂姆建议使用documentfragment,并且能够捕获由于使用domstringlist而导致的firefox错误,而不是clipboarddata类型的字符串。 |
![]() |
3
116
简单版本:
使用
演示: http://jsbin.com/nozifexasu/edit?js,output Edge、Firefox、Chrome、Safari、Opera测试。 注: 记住检查输入/输出 服务器端 同样(类似) PHP strip-tags ) |
![]() |
4
24
在Chrome/FF/IE11上测试
这些浏览器添加了一个chrome/ie烦恼
选择一些突出显示的HTML并粘贴到此处:
|
![]() |
5
15
我在这里用屏幕外的文本区为TimDowns的提案写了一些概念证明。代码如下:
只需将整个代码复制并粘贴到一个HTML文件中,然后尝试将(使用ctrl-v)文本从剪贴板粘贴到文档的任何位置。 我在IE9和新版本的Firefox、Chrome和Opera中测试过它。效果相当好。另外,可以使用他喜欢的任何键组合来触发这个功能也是很好的。当然,不要忘记包含jquery源。 请随意使用此代码,如果您有一些改进或问题,请将它们发回。另外请注意,我不是javascript开发人员,因此我可能错过了一些东西(=gt;做您自己的测试)。 |
![]() |
6
10
基于 L2AelBA 安瑟尔这是在FF、Safari、Chrome、IE(8、9、10和11)上测试的。
|
![]() |
7
9
这个不使用任何setTimeout()。 我已经用过 this 实现跨浏览器支持的优秀文章。
此代码在粘贴前使用选择手柄进行扩展: demo |
![]() |
8
5
为了 清除粘贴的文本 和 用粘贴的文本替换当前选定的文本 事情很简单:
JS:
|
![]() |
9
5
这应该适用于所有支持onPaste事件和突变观察者的浏览器。 这个解决方案不仅仅是获取文本,它实际上允许您在粘贴到元素之前编辑粘贴的内容。 它通过使用ContentEditable、OnPaste事件(所有主要浏览器都支持)en突变观察器(由Chrome、Firefox和IE11+支持)工作。 步骤1 创建内容可编辑的HTML元素
步骤2 在JavaScript代码中添加以下事件
我们需要绑定pastecallback,因为突变观察者将被异步调用。 步骤3 在代码中添加以下函数
} 代码的作用:
多谢 Tim Down 答案见本帖: |
![]() |
10
4
适用于我的解决方案是,如果要粘贴到文本输入中,则添加事件侦听器来粘贴事件。 由于粘贴事件发生在输入文本更改之前,因此在我的on-paste处理程序中,我创建了一个延迟函数,在该函数中,我检查在粘贴时发生的输入框中的更改:
|
![]() |
11
4
对尼科的回答发表评论太长了,我认为这在火狐上不再有效(根据评论),在Safari上也不再适用。 首先,您现在似乎能够直接从剪贴板读取。而不是像这样的代码:
用途:
因为火狐有一个
下一个Firefox将不允许粘贴,除非焦点位于
最后,火狐不允许粘贴
可靠地
除非焦点在
我试图隐藏文本字段,以便在JSVNC仿真器上进行粘贴(即,它将指向远程客户机,实际上没有
在Safari上,上述第二部分适用,即您需要
|
![]() |
12
3
首先想到的是Google关闭库的PasteHandler http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/pastehandler.html |
![]() |
13
2
这对我很有用:
|
![]() |
14
2
这个解决方案是替换HTML标签,它是简单的跨浏览器;检查这个jfiddle: http://jsfiddle.net/tomwan/cbp1u2cx/1/ 核心代码:
注意:您应该在后面做一些关于XSS过滤器的工作,因为这个解决方案不能过滤字符串,如“<<>” |
![]() |
15
1
您可以这样做: 将此jquery插件用于粘贴前和粘贴后事件:
现在您可以使用这个插件;:
解释 首先将所有现有元素的uid设置为数据属性。 然后比较粘贴后的所有节点事件。因此,通过比较,您可以识别新插入的元素,因为它们将有一个uid,然后只需从新创建的元素中删除style/class/id属性,这样您就可以保留旧的格式。 |
![]() |
16
1
|
![]() |
17
1
只需让浏览器像往常一样在其内容可编辑的DIV中粘贴,然后在粘贴之后,将用于自定义文本样式的任何跨距元素与文本本身交换。在Internet Explorer和我尝试的其他浏览器中,这似乎工作正常…
此解决方案假定您正在运行 JQuery 那 您不希望在任何内容中使用文本格式可编辑的分隔符 . 好处是它非常简单。 |
![]() |
18
1
|
![]() |
19
1
简单解决方案:
|
![]() |
20
0
这是上面发布的一个现有代码,但我已经为IE更新了它,错误是当选择并粘贴现有文本时,不会删除所选内容。这已由以下代码修复
请参见下面的完整代码
|
![]() |
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 3 月前 |
![]() |
Alex · 在轻量级中同时解构和不解构变量 3 月前 |
![]() |
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 3 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 4 月前 |
![]() |
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 4 月前 |