2010-10-22 51 views
29

我一直在尋找答案的高和低,但失敗了。替換contenteditable div中的選定文本

是否有跨瀏覽器解決方案來替換contenteditable div中的選定文本?我只想讓用戶突出顯示一些文本,並將突出顯示的文本替換爲xxxxx。

回答

63

下面將做的工作在所有主要瀏覽器:

function replaceSelectedText(replacementText) { 
    var sel, range; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.deleteContents(); 
      range.insertNode(document.createTextNode(replacementText)); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.text = replacementText; 
    } 
} 
+4

我不能相信就這麼簡單。有用。謝謝! – Judy 2010-10-22 15:01:19

+0

這在Chrome中不適用於我(粘貼到INPUT,TEXTAREA或內容編輯)。我懷疑這是因爲Chrome不支持多個範圍。它落入window.getSelection的情況下,但是然後sel.rangeCount是false,並且沒有「else」子句。 – 2012-08-15 15:51:32

+2

@DavidJeske:這絕對適用於可用於元素的Chrome,但不適用於輸入或textareas:在非-IE瀏覽器,此代碼特定於常規內容中的選擇。 – 2012-08-15 16:17:17

相關問題