繁体   English   中英

在 contentEditable div 中使用 jQuery 清理粘贴事件

[英]Sanitizing paste event using jQuery in contentEditable div

我正在尝试清理contentEditable div 中的粘贴。 也就是说,代码应该如下所示:

$('#content').bind('paste',function(e)
{
    // Ensure pasted markup is valid
});

理想情况下,我将能够解析粘贴的文本并以适合该站点的方式重新格式化它,但我不知道如何执行此操作。

或者,我可以轻松地粘贴为纯文本(而不是 HTML),但我也不知道如何执行此操作。

我对弹出一个带有文本区域的框的解决方案不太满意,要求用户粘贴到该文本区域,然后将文本放入前一个光标位置的内容中。 我知道如何做到这一点,但想避免它。

而且我对仅仅通过使用e.preventDefault()阻止用户粘贴感到非常不舒服。

我已经能够使用 rangy javascript 库实现这一点,该库允许我在清理内容后保存和恢复插入符号位置。

https://github.com/timdown/rangy

在 chrome 和 safari 中测试。

$("#content").on('paste', function(){
    sanitize();
});

function sanitize(){
    setTimeout(function(){

        var savedSelection = rangy.saveSelection();

        $("#content *").removeAttr("style"); // Do your parsing here.

        rangy.restoreSelection(savedSelection);         

    }, 0);  
}

大多数浏览器都没有直接的方法来访问在进入 DOM 之前粘贴的内容。 然而,有一种相当复杂的方法可以做到这一点,它只适用于由键盘触发的粘贴。 在这里看到我的回答:

JavaScript 在粘贴事件上获取剪贴板数据(跨浏览器)

一旦内容已经在现场,你能不能验证一下怎么办? 让内容粘贴进去,先保存原来的内容,如果新的内容无效,就用旧的替换回来。 这只是一个理论,但我现在也必须进行实验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM