【问题标题】:Delete selection with rangy使用 rangy 删除选择
【发布时间】:2012-06-26 11:17:18
【问题描述】:

我制作了一个带有一些清理逻辑的小内联编辑器。因此,如果您从 word 文件中粘贴,则会删除所有格式。

我的问题是,如果您选择例如一句话和粘贴,它不会被替换。这与清理逻辑有关。现在我需要知道,如何使用 rangy 删除范围,以便在粘贴之前删除该范围。

http://jsfiddle.net/eJNKy/3/

【问题讨论】:

    标签: javascript rangy


    【解决方案1】:

    您可以使用其deleteContents() 方法删除范围。

    Rangy 还处理了许多您试图在 jsFiddle 中修复的跨浏览器问题。它提供了一个createContextualFragment() 实现和一个带有getRangeAt() 的选择对象。此外,您应该使用keydown 事件的ctrlKey 属性。这是一个更新的 jsFiddle:

    http://jsfiddle.net/timdown/eJNKy/6/

    关键功能是

    function paste(html) {
        var sel = rangy.getSelection();
        if (html && sel.rangeCount > 0) {
            var range = sel.getRangeAt(0);
            range.deleteContents();
            var frag = range.createContextualFragment(html);
            var lastChild = frag.lastChild;
            range.insertNode(frag);
            range.collapseAfter(lastChild);
            sel.setSingleRange(range);
        }
    }
    

    【讨论】:

    • 非常感谢!没找到这个。这是一种很好的帮助!感谢您做的比我要求的更多。 :)
    • 您对检测通过上下文菜单或浏览器菜单进行的粘贴有什么提示吗?
    • @xotix:不是真的。一旦粘贴事件触发,重定向技巧在某些浏览器中不起作用。这是 Nico Burns 的答案,可能会有所帮助:stackoverflow.com/a/6804718,以及我在 cmets 中为该答案添加的 jsFiddle:jsfiddle.net/bQeWC/4
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2018-04-13
    相关资源
    最近更新 更多