Javascript 检索所选文本的html代码
在mozilla中,我可以选择一个文本并使用contentWindow.getSelection()打印所选文本。但我正在尝试获取此选定文本的底层html代码块。有什么办法可以取回它吗 我需要在用户选择的任何可点击文本下提取URL和其他信息,如src等。我需要其父节点的代码块Javascript 检索所选文本的html代码,javascript,firefox-addon,mozilla,Javascript,Firefox Addon,Mozilla,在mozilla中,我可以选择一个文本并使用contentWindow.getSelection()打印所选文本。但我正在尝试获取此选定文本的底层html代码块。有什么办法可以取回它吗 我需要在用户选择的任何可点击文本下提取URL和其他信息,如src等。我需要其父节点的代码块 谢谢。在执行contentWindow.getSelection之前,您是否有鼠标事件侦听器或其他功能 如果执行此操作,则可以通过执行以下操作获取选定节点: function onMouseUp(event) {
谢谢。在执行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窗口上,甚至在浏览器外(如浏览器窗口未处于最大值或用户在操作系统任务栏中移动鼠标等)因此,仅将此代码用作指南检索HTML应该相对容易,但这取决于您想要什么。返回一个。您可以使用:
以获取选择开始和结束的位置window.getSelection().anchorNode
以获取选择结束的位置window.getSelection().focusNode
let selection = contentWindow.getSelection();
let firstElement = selection.anchorNode;
let lastElement = selection.focusNode;
一旦你有了节点/元素,你会做什么取决于你真正想要找到的是什么。您还没有指定,因此在查找这些节点之前对其进行操作只是猜测您想要什么。例如,您可能只想找到
anchorNode
的父节点,验证它是否包含focusNode
(firstElement.parentNode.contains(lastElement)
)(如果没有,则继续查找下一个父节点,直到找到为止),并使用父节点的innerHTML
。或者,也许您想找到anchorNode
的第一个父元素,该元素包含focusNode
,然后使用a遍历DOM树,直到找到anchorNode
并开始累积HTML,直到遇到focusNode,现在我正在选择文本,然后触发功能。但最终我必须编写一个鼠标事件监听器,如您在这里所示。ParentNode.innerHTML为我提供的文本不是html代码。tryvar el=ev.explicitOriginalTarget;当(el.parentNode.nodeType!=3){el=el.parentNode}
nodeType 3是text node Cool@ac11时,你在github上有你的代码可以共享吗?不幸的是,我没有。我已经更新了我的帖子,提供了更多我需要的信息。ParentNode.innerHTML给了我文本。哇,很酷的东西,如果一个选择跨越多个节点呢?它会把它们全部归还吗?