我需要实现RichTextEditors非常常见的任务 - 从剪贴板中获取HTML.任何人都可以帮助指导如何解决这个任务?
它必须是跨平台(IE,FF,Chrome,Opera).我刚从这段代码开始:
<script type="text/javascript">
$('.historyText').live('input paste', function(e) {
var paste = e.clipboardData && e.clipboardData.getData ?
e.clipboardData.getData('text/plain') : // Standard
window.clipboardData && window.clipboardData.getData ?
window.clipboardData.getData('Text') : // MS
false;
alert(paste);
});</script>
Run Code Online (Sandbox Code Playgroud)
window.clipboardData和e.clipboardData都为null(Chrome,Firefox).
更新:用户想要粘贴其他浏览器窗口中的文章内容,我需要获取html标签.
场景:我正在尝试拦截textarea/input文本中的粘贴事件,并过滤要粘贴的内容.
Webkit/IE处理得相当好,因为我可以将代码附加到onpaste事件中,然后从剪贴板中读取正在粘贴的内容.大量的实例左右.
Gecko比较棘手,因为据我所知,不可能在ffox上读取剪贴板内容 (除非有人知道解决方法吗?)
我只是使用输入交换技巧.
歌剧正在烦人.我可以陷阱CTRL+ V和SHIFT+ INS,但没有onpaste事件.
显然,更不用说任何类型的剪贴板交互了.
所以,我的问题是:
我可以检测用户是否 在Opera的上下文菜单中单击了paste 吗?有没有其他方法来检测事件?
编辑:
感谢大家的答案 - 即使没有明确的解决方案,他们都会增加一个好的输入.
不得不选择,我会选择唯一一个试图解决原始问题的人,如果不是太多的黑客甚至尝试,这可能会有用.
那些有同样问题的人的注释(输入过滤):
mouseup+ setTimeout的伎俩几乎处处完美.我现在有这个:
<input type="text" placeholder="Paste text" onPaste="alert(this.value);">
这确实有效,除了它返回一个空白警报窗口.我没有任何价值.救命?
我有一个contentEditable,我on('paste')通过捕捉事件剥离粘贴内容的格式.然后我关注textarea,将内容粘贴到那里,然后复制值.几乎是这里的答案.问题是我不能这样做:
$("#paste-output").text($("#area").val());
Run Code Online (Sandbox Code Playgroud)
因为这会用粘贴的文本替换我的整个内容.所以我需要将内容粘贴到插入位置.我整理了一个脚本来做到这一点:
pasteHtmlAtCaret($("#area").val());
// pastes CTRL+V content at caret position
function pasteHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != …Run Code Online (Sandbox Code Playgroud) 当从Web浏览器复制粘贴到文本处理器时,HTML标记将转换为富文本,文本处理器会尝试将标记转换为自己的格式.这证明剪贴板能够保持标记.
在浏览器窗口(正常<textarea>或其他元素)之间进行复制粘贴时,即使剪贴板中存在标记,也会忽略标记.
也许有一种解决方案可以让浏览器从剪贴板中选择富文本格式.
有没有办法在<textarea>元素中访问剪贴板的富文本?
换一种说法,
是否必须在剪贴板中的某处(因为剪贴板还不知道用户是否粘贴到文本处理器或Web浏览器中)的标记是否可以原样粘贴到HTTP POST变量中?
可能重复:
使用FireFox,Safari和Chrome在剪贴板上复制/放置文本
如何使用JavaScript复制到剪贴板?
嗨,
场景:我复制了一些内容(来自记事本或单词),并希望将其粘贴到我的iframe中.在粘贴之前我想操纵剪贴板内容.在IE中,我可以使用window.clipboardData.getData("Text");
如何在其他浏览器中读取剪贴板数据(FF/chrome和safari)
我已忽略了该paste事件。我注意到,由于阻止了事件的默认行为,因此当前无法使用Ctrl + Z撤消“粘贴”。
$(this).on('paste', function (evt) {
// Get the pasted data via the Clipboard API.
// evt.originalEvent must be used because this is jQuery, not pure JS.
// /sf/answers/2088211891/
var clipboardData = evt.originalEvent.clipboardData || window.clipboardData;
var pastedData = clipboardData.getData('text/plain');
// Trim the data and set the value.
$(this).val($.trim(pastedData));
// Prevent the data from actually being pasted.
evt.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以覆盖撤消功能,或者可以做其他不同的操作以使Ctrl + Z起作用?
我想将从某个文档(pdf,docx,html)中选择的文本粘贴到一个contenteditable类型的div中.
现在我想在渲染之前删除剪贴板文本的所有格式.因此,粘贴的最终内容应该是纯文本.
此方案的类似物可以将内容粘贴到Windows记事本中.
如何使用AngularJs完成此操作.或者存在任何其他javascript库来实现这一点.
更新: 我可以使用以下代码将剪贴板作为文本.
editor.addEventListener("paste", function(e) {
// cancel paste
e.preventDefault();
// get text representation of clipboard
var text = e.clipboardData.getData("text/plain");
// insert text manually
document.execCommand("insertHTML", false, text);
});
Run Code Online (Sandbox Code Playgroud)
但我不知道如何以及在何处在AngularJs中添加此代码.
我正在尝试捕获input[type="date"]元素的粘贴事件.在Chrome中,您无法复制/粘贴到此类元素中,因此我尝试将其包装在DIV带有onpaste事件的元素中.我遇到的问题是,如果你点击日期输入并按CTRL+ V没有任何反应.但是,如果您先单击身体中的任何其他位置,然后单击日期输入并按CTRL+ V,它将起作用...
<div onpaste="alert('test')">
<input type="date">
</div>
Run Code Online (Sandbox Code Playgroud)
演示:
https://jsfiddle.net/4qh31tn0/
编辑:好的,所以事实证明onpaste事件不必在DIV,它可以移动到INPUT元素,但问题仍然存在.如果我加载jsfiddle,单击输入并按CTRL+ V,没有任何反应.如果我INPUT事先单击元素之外的某个位置,然后单击输入并按CTRL+ V,它可以工作...
我有一个写网站url的文本框.我在旁边放了一个按钮.
我想如果用户从任何地方复制网址并单击该按钮,则复制的网址粘贴在该文本框中.
现在我可以使用ctrl + v将url粘贴到文本框中.但是移动用户无法使用它.因此,我需要在文本框中单击该按钮复制的URL粘贴.
任何帮助高度赞赏,并提前感谢.
javascript ×10
jquery ×5
html ×4
clipboard ×2
paste ×2
angularjs ×1
copy-paste ×1
dom-events ×1
iframe ×1
input ×1
plaintext ×1
text ×1
undo ×1