检索所选文本的{h}代码

时间:2015-06-24 15:38:29

标签: javascript firefox-addon mozilla

在mozilla中,我可以使用contentWindow.getSelection()选择文本并打印所选文本。但我正在尝试获取此选定文本的基础html代码块。我有什么方法可以找回它吗?

我需要在用户选择的任何可点击文本下面提取网址和其他信息,如src等。我需要其父节点的代码块。

感谢。

2 个答案:

答案 0 :(得分:2)

检索HTML应该相对容易,但这取决于您的需求。 window.getSelection()会返回selection object。您可以使用:

  • window.getSelection().anchorNode获取选择开始的Node
  • window.getSelection().focusNode获取选择结束的Node

例如:

let selection = contentWindow.getSelection();
let firstElement = selection.anchorNode;
let lastElement = selection.focusNode;

一旦拥有节点/元素,您所做的将取决于您实际想要查找的内容。你没有指定,所以在找到那些节点之后操纵它只会猜测你想要什么。例如,您可能想要找到anchorNode的父级,验证它是否包含focusNodefirstElement.parentNode.contains(lastElement))(如果没有,则继续查找下一个父级,直到它为止)并且使用父亲的innerHTML。或者,您可能希望找到包含anchorNode的{​​{1}}的第一个父元素,然后使用TreeWalker遍历DOM树,直到找到focusNode和开始累积HTML,直到遇到anchorNode

答案 1 :(得分:1)

在执行contentWindow.getSelection?

之前,您是否有鼠标事件监听器?

如果这样做,您可以通过执行以下操作来获取所选节点:

    function onMouseUp(event) {
        var aWindow = event.target.ownerDocument.defaultView;
        // should test if aWindow is chrome area or actually content area
var contentWindow = aWindow.document instanceof Ci.nsIHTMLDocument ? aWindow : null; // i guessed here but testing if its content window is done in some similar way
if (!contentWindow) { return }
        // do contentWindow.getSelection im not familiar with the code, if selection exists // check if more then one range selected then get node for each, however im going to assume only one range is selected
        var nodeOfFirstRange = event.explicitOriginalTarget
        var elementOfNode = nodeOfFirstRange.parentNode;
        var htmlOfElement = elementOfNode.innerHTML;
    }

    Services.wm.getMostRecentWindow('navigator:browser').gBrowser.addEventListener('mouseup');

此代码的问题是,如果用户将鼠标放在内容窗口中,然后将鼠标悬停在内容窗口之外,就像在Chrome窗口之外甚至在浏览器之外(例如,如果浏览器窗口不是最大值,或者如果用户)在os等任务栏中的mousedup)所以只需使用此代码作为指南