xul-获取选择html

时间:2009-08-14 18:14:52

标签: html xul getselection

我有以下函数可以为网页上的用户选择区域获取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;

}

1 个答案:

答案 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();