2010-10-22 141 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

相关问题