2010-11-14 36 views
14

是否有跨瀏覽器的方式來獲取所選文本的HTML?選定文本的HTML

+0

可能重複的(http://stackoverflow.com/questions/10478/getting-selected-text-in-a-browser-cross-platform) – Sarfraz 2010-11-14 09:38:23

+5

這個問題的答案都不是很好,這是一個不同的問題:它要求選擇的文本,而不是HTML所選文字。 – 2010-11-14 11:32:49

+0

已經在SO上回答http://stackoverflow.com/questions/10478/getting-selected-text-in-a-browser-cross-platform – wiifm 2010-11-14 09:36:50

回答

31

此功能將做它在所有主要瀏覽器:[在瀏覽器,跨平臺的入門選擇的文本]

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; 
 
     } 
 
    } 
 
    return html; 
 
} 
 

 

 
// bind events for selection 
 

 
document.addEventListener('mouseup', function(){ 
 
    var selectedHTML = getSelectionHtml(); 
 
    if(selectedHTML) 
 
    console.log(selectedHTML) 
 
}); 
 

 
document.addEventListener('keyup', function(e){ 
 
    var selectedHTML, key = e.keyCode || e.which; 
 
    if(key == 16){ // if "shift" key was released 
 
    selectedHTML = getSelectionHtml(); 
 
    if(selectedHTML) 
 
     console.log(selectedHTML) 
 
    } 
 
});
<ul contenteditable> 
 
    <li><p>Select <b>this</b> <em>text</em> right <i>here</i></p></li> 
 
    <li>Or <b>this text</b></li> 
 
</ul>

+2

的這種解決方案的問題是,當你選擇

第一段文字,

帽鎖定部分選擇第二段

你沒有得到預期的「文本

BE SELECTED「而是」

文本

選擇

- 對於那些不以關閉是那些選擇某種原因,瀏覽器的廣告標籤有什麼辦法如何只得到真正是在選擇 – honzzz 2015-08-08 06:19:59

+2

?一個HTML文檔基本上是一個節點樹,一旦最初的HTML文本被解析了,它就基本上消失了,你必須處理節點。將選擇轉換成可能(但相對複雜)您建議的字符串類型,但不能保證它與原始HTML文本相匹配,這只是表示文檔的許多同等有效方式之一。 – 2015-08-10 08:50:27

+0

適合我thanx!它也給了我一些想法.. – 2015-12-03 12:33:15