仅将纯文本粘贴到可编辑的div中

时间:2010-08-24 02:08:35

标签: javascript events javascript-events paste plaintext

我需要能够允许用户粘贴到可编辑的div中(通过用户选择的任何内容:右键单击并粘贴,快捷键等),但我想丢弃格式并仅采用纯文本。

我无法使用textarea,因为如果由用户启动的事件应用,div将允许基本格式(粗体和斜体)。

onbeforepaste事件看起来很有希望,但根据quirksmode,支持是如此有限以致无法使用。

tyia任何建议

4 个答案:

答案 0 :(得分:1)

这很棘手,但并非不可能。您可以做的是非常复杂,并且可以在Firefox 2 +,IE 5.5+和最近的WebKit浏览器(如Safari 4或Chrome)(旧版本未经测试)中使用。 TinyMCE和CKEditor的最新版本在基于iframe的编辑器上使用了这种技术:

  1. 使用按键事件处理程序检测ctrl-v / shift-ins事件
  2. 在该处理程序中,保存当前用户选择,在屏幕外添加一个textarea元素(比如左边-1000px),关闭contentEditable并在textarea上调用focus(),从而移动插入符并有效地重定向粘贴
  3. 在事件处理程序中设置一个非常简短的计时器(比如说1毫秒),调用另一个存储textarea值的函数,从文档中删除textarea,重新打开contentEditable,恢复用户选择并粘贴文本。 / LI>

    请注意,这仅适用于键盘粘贴事件,而不适用于上下文或编辑菜单中的粘贴。 paste事件会更好,但是当它触发时,将插入符号重定向到textarea(至少在某些浏览器中)为时已晚。

答案 1 :(得分:1)

对于 Ctrl + v 我检查了keyup上可编辑div的内容。您可以修改该事件中的内容。我正在使用nicedit文本编辑器。 这对于右键单击的粘贴不起作用 - >糊。 对于“粘贴”,我必须使用settimeout修改内容。

.addEvent('paste', function(e) {
        setTimeout(function(){
            if(condition){
                //modify content
            }
        },350);
    });

答案 2 :(得分:1)

也可以使用javaScript进行攻击。希望这有帮助

我创建了一个示例here

<div contentEditable="true" id="clean-text-div"> </div>
<div id="clean-btn"> Clean Me</div>
<div id="message"> paste html content and clean background HTML for pure text</div>


$("#clean-btn").click(function(){
    $("#clean-text-div").text($("#clean-text-div").text());
    $("#message").text("Your text is now clean");
});

答案 3 :(得分:0)

您是否尝试过“粘贴”或“输入”等事件?然后你可以使用正则表达式来跳转所有的html标签

$(document).bind('paste', function(e){ alert('pasting!') })

http://www.hscripts.com/scripts/JavaScript/remove-html-tag.php

关于粘贴事件的讨论你还应该阅读:
Catch paste input