在mozilla中,我可以使用contentWindow.getSelection()选择文本并打印所选文本。但我正在尝试获取此选定文本的基础html代码块。我有什么方法可以找回它吗?
我需要在用户选择的任何可点击文本下面提取网址和其他信息,如src等。我需要其父节点的代码块。
感谢。
答案 0 :(得分:2)
检索HTML应该相对容易,但这取决于您的需求。 window.getSelection()
会返回selection object。您可以使用:
例如:
let selection = contentWindow.getSelection();
let firstElement = selection.anchorNode;
let lastElement = selection.focusNode;
一旦拥有节点/元素,您所做的将取决于您实际想要查找的内容。你没有指定,所以在找到那些节点之后操纵它只会猜测你想要什么。例如,您可能想要找到anchorNode
的父级,验证它是否包含focusNode
(firstElement.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)所以只需使用此代码作为指南