我有以下函数可以为网页上的用户选择区域获取HTML。此功能似乎无法正常工作。
有时,它会获得未被选中的htmls。
任何人都可以看看这个功能吗? - 非常感谢。
// ----------------------------获取选定的HTML -------------- ----------
function getSelectionHTML(){
if (window.getSelection)
{
var focusedWindow = document.commandDispatcher.focusedWindow;
var sel = focusedWindow.getSelection();
var html = "";
var r = sel.getRangeAt(0);
var parent_element = r.commonAncestorContainer;
var prev_html = parent_element.innerHTML;
if(prev_html != undefined)
{
return prev_html;
}
return sel;
}
return null;
}
答案 0 :(得分:2)
在我看来,你得到的是父元素的内容,而不是选择本身。如果父元素包含除了您选择的内容以外的任何内容,那么您也会得到它。
var sel = focusedWindow.getSelection();
这一行returns一个selection object。它包含用户选择的确切文本。然后,您可以从选择中获取范围并获取commonAncestorContainer。所以如果你有这样的代码:
<div id="ancestor">
<p>First sentence.</p>
<p>Another sentence.</p>
</div>
并且您的用户从第一个句子的's'到第二个句子的's'选择,然后commonAncestorContainer是div
元素,因此您还将获得文本的其余部分。
这样做的一个很好的理由是,如果你想保证自己是一个有效的HTML片段(这似乎是你的函数名称暗示的情况),但是如果你只想要所选的文本,那么请调用{{3}直接在范围内的方法:
var focusedWindow = document.commandDispatcher.focusedWindow;
var sel = focusedWindow.getSelection();
var r = sel.getRangeAt(0);
return r.toString();