0

我有以下功能应该为网页上的用户选择区域获取 HTML。此功能似乎无法正常工作。

有时,它也会获得未选择的 html。

任何人都可以看看这个功能吗? - 非常感谢。

//----------------------------获取选定的HTML----------------- --------

函数 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;

}

4

1 回答 1

2

在我看来,您正在获取父元素的内容而不是选择本身。如果父元素包含您选择的内容以外的任何内容,那么您也会得到它。

var sel = focusedWindow.getSelection();

此行返回一个选择对象。它包含用户选择的确切文本。然后,您从选择中获取范围并获取commonAncestorContainer。所以如果你有这样的代码:

<div id="ancestor">
    <p>First sentence.</p>
    <p>Another sentence.</p>
</div>

并且您的用户从第一句的“s”选择到第二句的“s”,然后 commonAncestorContainer 是div元素,因此您还将获得其余的文本。

这样做的一个很好的理由是,如果您想保证自己是一个有效的 HTML 片段(这似乎是这种情况,由您的函数名称暗示),但如果您只想要选定的文本,则直接在范围上调用toString方法:

var focusedWindow = document.commandDispatcher.focusedWindow;
var sel = focusedWindow.getSelection();
var r = sel.getRangeAt(0);
return r.toString();
于 2009-08-27T22:19:16.430 回答