【问题标题】:xul-Get selection htmlxul-获取选择html
【发布时间】:2009-08-14 18:14:52
【问题描述】:

我有以下功能,应该为网页上用户选择的区域获取 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;

}

【问题讨论】:

    标签: html xul getselection


    【解决方案1】:

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

    var sel = focusedWindow.getSelection();
    

    这条线returnsselection object。它包含用户选择的确切文本。然后,您从选择中获取范围并获取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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2017-07-27
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      相关资源
      最近更新 更多