我想在mozilla和ie中捕获粘贴的html然后,在粘贴事件发生之前,我想修改它.有什么建议?
我试图用chrome的'纯文本'的行为创建一个contenteditable div.因此,用户只能输入纯文本,而在复制富文本时,它会被粘贴为纯文本.在我的脚本中,@ -mentions转换为按钮并使用Rangy.js添加
在普通的contenteditable div中,可以粘贴富文本,我需要将其转换为普通文本.唯一的问题是检测粘贴的内容,然后将其转换为文本并将其插入正确的位置,并在恢复胡萝卜位置后.在更多行上选择更多文本时更难.
我是否认为很难,是否有更简单的解决方案?或者任何人都可以推荐最轻量级的编辑器?
谢谢!
我希望将文本粘贴到一个可信的div中,但作为textarea进行反应.
请注意,我想保留格式,因为我会将其粘贴到我的textarea中(来自word,excel ...).
所以.
1)在contenteditable div中粘贴文本
2)我从剪贴板中获取文本
3)我将我的值从剪贴板推送到我的textarea,(不知道怎么做?)
4)从我的textarea获取值并将其放在我的contenteditable div
任何建议?
假设我复制了一些“恶意”输入,例如带有事件处理程序或其他 JavaScript 的 DOM 节点
<img src="bunny.jpg" onload="alert('hi');">
Run Code Online (Sandbox Code Playgroud)
如果我将其复制到剪贴板并将其粘贴到contenteditablediv 中,则事件处理程序将被干净地删除。
<img src="/Users/tjhance/Desktop/bunny.jpg">
Run Code Online (Sandbox Code Playgroud)
我现在可以随心所欲地操纵这个 DOM 节点了。到目前为止还不错。
另一方面,假设我想挂钩浏览器的粘贴事件并以我自己的方式处理粘贴。我可以轻松获取剪贴板数据:
<div contenteditable="true" id="myContentEditableDiv"></div>
<script>
$('#myContentEditableDiv').on('paste', function(event) {
console.log(event);
var pastedHtml = event.originalEvent.clipboardData.getData('text/html');
console.log(pastedHtml);
});
</script>
Run Code Online (Sandbox Code Playgroud)
当我粘贴时,我得到了 HTML
<meta charset='utf-8'><img src="/Users/tjhance/Desktop/bunny.jpg" onload="alert('hi');" style="color: rgb(0, 0, 0); font-family: Times; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 1; word-spacing: 0px; -webkit-text-stroke-width: 0px;">
Run Code Online (Sandbox Code Playgroud)
它未经消毒,并且仍然具有事件侦听器。据我所知,我无法用这个字符串做任何事情。我无法使用浏览器将其解析为 HTML,因为它会运行 JavaScript,这是一个巨大的安全漏洞。
很明显,浏览器具有一定的清理 HTML 的功能,因为它是在粘贴时执行的。因此,如果我想要干净的 HTML,我可以等待事件完成并将 …
在将某些内容粘贴到文本输入字段后,我试图获取它的内容。如何获取数据?我$event.target.value用于keyup事件的方法不起作用。如果您使用粘贴某些内容,则Ctrl + V由于keyup事件而起作用,但是,如果我尝试从浏览器的上下文菜单中粘贴某些内容,则它将不起作用。
这是一个非常简单的代码示例:
@Component({
selector: 'my-app',
template: `<input type="text" [ngModel]="value" (paste)="pasteEvent($event)" (keyup)="keyupEvent($event)">
<br>{{result}}`
})
export class AppComponent {
public result: string;
public pasteEvent($event: any) {
this.result = $event.target.value;
console.log('paste: '+ $event.target.value);
console.log($event);
}
public keyupEvent($event: any) {
this.result = $event.target.value;
console.log('keyup: '+ $event.target.value);
}
}
Run Code Online (Sandbox Code Playgroud) 此方法检测ctrl + v事件,但我无法找到如何获取它的值?
提前致谢,
$(".numeric").keydown(function (event) {
if (event.shiftKey) {
event.preventDefault();
}
switch (event.keyCode) {
case 86:
if (event.ctrlKey) { // detects ctrl + v
var value = $(this).val();
alert(value); // returns ""
}
break;
}
Run Code Online (Sandbox Code Playgroud) <input>
Run Code Online (Sandbox Code Playgroud)
当有人将多行文本粘贴到输入中时,我需要用逗号替换换行符(\r、\n、 和\r\n)和制表符。大多数情况下,当用户复制一列或一行时,输入将来自 Microsoft Excel 或 Apple Numbers。\t,
$(function(){
// jQuery paste event. how trendy!
$('input').on('paste', function(e){
var e = $(this);
setTimeout(function(){
e.val( $.trim(e.val()).replace(/\s+/g, ',') );
}, 0);
});
});
Run Code Online (Sandbox Code Playgroud)
电子表格中的某些单元格中可能有空格,因此/\s+/g会太宽泛。但是,/[\r\n\t]+/g不起作用。事实上,我认为 jQuery 在删除换行符之前甚至无法访问输入的值。
我提供了一个带有预期输入和输出的jsfiddle
<!-- sample input, copy below this line --
one
2
hello world
foo bar
m3000
-- end copy -->
<!-- output should look like
one, 2, …Run Code Online (Sandbox Code Playgroud) 我有一个angularjs指令,它监听我的textarea的粘贴事件:
element.on('paste', function (event) {
});
Run Code Online (Sandbox Code Playgroud)
我如何获得粘贴的文字?我试过了:
event.clipboardData.getData('text/plain')
Run Code Online (Sandbox Code Playgroud)
......和:
event.originalEvent.clipboardData
Run Code Online (Sandbox Code Playgroud)
......但两者都没有用.任何的意见都将会有帮助.
我的要求:当用户从我的网页复制一些内容时,带有文本的一些HTML标记和回车符也将被复制。我需要修改剪贴板中的复制内容,即删除回车键和HTML标签。
到目前为止,我已经尝试过: 即使使用jQuery,我也已捕获了副本并获得了剪贴板的内容。参见下面的代码。
$(document).bind('copy', function () {
//getting clipboard content
var selectedText = window.getSelection().toString();
//removing carriage retun from content
selectedText = selectedText.replace(/<\/?[^>]+(>|$)/g, "");
//Trying to set data in clipboard
window.clipboardData.setData(selectedText); //Throws error
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用设置剪贴板中的setData时window.clipboardData.setData(selectedText);,将引发错误。
问题:
1)我是否使用正确的功能(即setData()修改剪贴板内容)?
2)有人可以让我知道如何在这里修改剪贴板的内容吗?