2012-06-26 39 views
0

我用一些清理邏輯做了一個內聯編輯器。所以如果你從一個word文件粘貼,它會刪除所有的格式。用rangy刪除選區

我的問題是,如果您選擇例如一個句子和粘貼,它不會被替換。這對於cleanUp邏輯是雙重的。現在我需要知道,我如何用rangy刪除一個範圍,所以我可以在粘貼之前刪除這個範圍。

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

回答

3

您可以使用它的方法deleteContents()刪除範圍。

Rangy還處理了很多您嘗試在jsFiddle中修復的跨瀏覽器問題。它提供createContextualFragment()實現和一個選擇對象getRangeAt()。此外,您應該使用​​事件的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); 
    } 
} 
+0

非常感謝!沒有找到這個。這是一種很好的幫助!感謝您做得更多,然後我問。 :) – xotix

+0

你可能有任何提示,通過上下文菜單或瀏覽器菜單檢測粘貼? – xotix

+0

@xotix:不是。一旦粘貼事件觸發,重定向技巧在某些瀏覽器中不起作用。下面是Nico Burns的一個答案,可能有助於:http://stackoverflow.com/a/6804718,以及我在該答案的評論中添加的jsFiddle:http://jsfiddle.net/bQeWC/4/ –