這將在所有主流瀏覽器中完成。對於IE和更多符合標準的瀏覽器,有單獨的分支。在IE中,它稍微容易一些,因爲根據選擇創建的專有TextRange
對象具有方便的htmlText
屬性。在其他瀏覽器中,您必須使用DOM Range的cloneContents()
方法創建一個包含所選內容副本的DocumentFragment
,並通過將片段附加到元素並返回元素的innerHTML
屬性來從中獲取HTML。
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;
}
alert(getSelectionHtml());
謝謝,這似乎很有希望。但是,當我僅選擇文本時,我通常不會收到文本所包含的標籤。如果我選擇了更多(例如,某些空白),它似乎會返回包含文本的標籤。基本上,我只想獲取選定的文本,然後選擇高於我收到的文本的howmany級別。例如。
test
測試
或test
@Tom:你想在'
o|ne
tw|o
好評。考慮一下,我可能應該改述我的問題/需求。我需要的是一個包含選擇左側的html,選擇的html和選擇右側的html的數組。所以在你的情況下:arr [0] =
o, arr[1] = ne
tw, arr[2] = o