2011-06-06 46 views
44

有了contenteditable元素我怎样才能用我自己的html替换选定的内容?如何用contenteditable元素中的html替换选定的文本?

+0

这个问题的第二部分(“换成我自己的HTML所选文本”)中,他的问题链接为未回答这是一个重复的参考。 – 2014-07-15 23:49:42

+0

我删除了已回答的部分,以符合“每个问题的一个问题”规则。 – FakeRainBrigand 2014-07-16 00:16:20

回答

69

看到这里的工作的jsfiddle:从Tim Down采取http://jsfiddle.net/dKaJ3/2/

function getSelectionHtml() { 
    var html = ""; 
    if (typeof window.getSelection != "undefined") { 
     var sel = window.getSelection(); 
     if (sel.rangeCount) { 
      var container = document.createElement("div"); 
      for (var i = 0, len = sel.rangeCount; i < len; ++i) { 
       container.appendChild(sel.getRangeAt(i).cloneContents()); 
      } 
      html = container.innerHTML; 
     } 
    } else if (typeof document.selection != "undefined") { 
     if (document.selection.type == "Text") { 
      html = document.selection.createRange().htmlText; 
     } 
    } 
    alert(html); 
} 

代码:Return HTML from a user-selected text

+15

这看起来很熟悉... http://stackoverflow.com/questions/4652734/return-html-from-a-user-selection/4652824#4652824 – 2011-06-06 13:37:49

+13

重新使用来自另一个答案的代码很好,但它会很有礼貌地提及你从哪里得到的。 – 2011-06-06 14:35:10

+2

@Tim Down:对不起。我知道属性代码。我总是首先在文本编辑器中设置我的答案,并且最终链接到您的问题,我想我在粘贴之前并没有复制所有内容(您不必接受我的说法)。这确实是一个诚实的错误,我会更新我的答案。 – 2011-06-06 15:12:05

48

获取所选的HTML,你可以使用我写了this question功能。要用您自己的HTML替换选择,您可以使用this function。下面是插入一个HTML字符串而不是DOM节点的替代品功能的版本:

function replaceSelectionWithHtml(html) { 
    var range; 
    if (window.getSelection && window.getSelection().getRangeAt) { 
     range = window.getSelection().getRangeAt(0); 
     range.deleteContents(); 
     var div = document.createElement("div"); 
     div.innerHTML = html; 
     var frag = document.createDocumentFragment(), child; 
     while ((child = div.firstChild)) { 
      frag.appendChild(child); 
     } 
     range.insertNode(frag); 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.pasteHTML(html); 
    } 
} 

replaceSelectionWithHtml("<b>REPLACEMENT HTML</b>"); 
+0

Nice Reaaaaaaaaaaaaaaaaaaly :) Thanks Tim +1 – Marwan 2012-11-11 11:07:35

+0

真棒,和实际回答问题的奖励点:如何不只是得到的选择,而是取代它。 – tobek 2014-05-15 22:01:11

+0

请定义'node'。我想我们可以删除这行'html =(node.nodeType == 3)? node.data:node.outerHTML;' – 2014-06-25 14:06:41

相关问题