【问题标题】:How to clean input on paste? A tiny WYSIWYG editor如何清理粘贴上的输入?一个小小的 WYSIWYG 编辑器
【发布时间】:2012-07-02 09:05:36
【问题描述】:

嘿 Stackoverflow 社区,

我编写了一个示例代码,它应该在粘贴时清理 HTML 代码,但它没有按预期工作。在每次粘贴时,它都会复制 <textarea> 并且粘贴不起作用。

这里是 JsFiddle:http://jsfiddle.net/Kxmaf/214/

非常感谢任何帮助:)

【问题讨论】:

    标签: javascript jquery editor wysiwyg paste


    【解决方案1】:

    新版本: http://jsfiddle.net/Kxmaf/218/

    您对setTimeout() 的看法是正确的,不知道 paste 事件延迟。 现在,我在 FF 上看到,document.execCommand() 有点错误,所以我简化了很多(不再关注,execCommand):

    $editor.on('paste, keydown', function() {
        var $self = $(this);            
        setTimeout(function(){ 
            var $content = $self.html();             
            $clipboard.val($content);
        },100);
    });
    

    这个怎么样:http://jsfiddle.net/Kxmaf/215/

    $editor.on('paste, keydown', function() {
         var $self = $(this),
             $content = $self.html();       
         $clipboard.val('').focus();
         document.execCommand('insertHTML', false, $content);
         $self.html($content);
         placeCaretAtEnd($self);                
    });
    

    没有更多setTimeout()。 我也添加了 keydown ,因为它对我来说听起来更好;)如果你愿意,你可以删除它。 这样做:

    • 获取#content的内容
    • 删除 textarea 内容并专注于它。
    • 将内容从#content 插入到textarea
    • 替换#content的内容以防它被删除或替换(这是我测试的一部分,我不知道$self.html($content);现在是否相关。
    • 在#content 末尾添加插入符号。

    placeCaretAtEnd() 来自https://stackoverflow.com/a/4238971/460368,我稍作修改。

    【讨论】:

    • 不幸的是,您的示例不起作用。它将内容放入 textarea,但不放入可编辑的 div :( textarea 只是一个助手,它应该关注“粘贴”并清除输入,然后将内容放回 div。
    • 新代码也不能正常工作 :( 脚本应该做的是清理剪贴板内容。在粘贴时,textarea 应该抓住焦点。浏览器将内容粘贴到 textarea 中。100 毫秒后将 textarea 中清理后的内容复制回可编辑的 div。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多