Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索所选文本的html代码_Javascript_Firefox Addon_Mozilla - Fatal编程技术网

Javascript 检索所选文本的html代码

Javascript 检索所选文本的html代码,javascript,firefox-addon,mozilla,Javascript,Firefox Addon,Mozilla,在mozilla中,我可以选择一个文本并使用contentWindow.getSelection()打印所选文本。但我正在尝试获取此选定文本的底层html代码块。有什么办法可以取回它吗 我需要在用户选择的任何可点击文本下提取URL和其他信息,如src等。我需要其父节点的代码块 谢谢。在执行contentWindow.getSelection之前,您是否有鼠标事件侦听器或其他功能 如果执行此操作,则可以通过执行以下操作获取选定节点: function onMouseUp(event) {

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

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


谢谢。

在执行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代码。try
var el=ev.explicitOriginalTarget;当(el.parentNode.nodeType!=3){el=el.parentNode}
nodeType 3是text node Cool@ac11时,你在github上有你的代码可以共享吗?不幸的是,我没有。我已经更新了我的帖子,提供了更多我需要的信息。ParentNode.innerHTML给了我文本。哇,很酷的东西,如果一个选择跨越多个节点呢?它会把它们全部归还吗?