获取不带Jquery的嵌套父HREF节点

Get nested parent HREF node without Jquery

本文关键字:HREF 节点 嵌套 Jquery 获取      更新时间:2023-09-26

我正在开发一个简单的Firefox插件,并试图在节点嵌套为的情况下获得IMG的父HREF节点

<a href="http://somesite.com">
     <div id="some_div">
          <img src="image.jpg" />
     </div>
</a>

<a href="http://somesite.com">
     <div id="some_div">
           <span class="some_class">    
               <img src="image.jpg" />
           </span>
     </div>
</a>

使用Firefox SDK,我可以获得IMG SRC链接及其父节点:

var href = node.parentNode.href;

但如果HREF节点高于某些级别,则不会。

编写一些纯Javascript代码以"爬"上DOM树,直到它到达A HREF节点(从IMG SRC开始)的任何帮助都将不胜感激。

编辑:

通过使用下面的Touffy答案,这是迄今为止的代码:

self.on("click", function (node, data) {
    if (node.nodeName == "A") { 
        var link = node.href; 
    }
    if (node.nodeName == "IMG") {
        var imgsrc = node.src;
        var nodes = document.getElementsByTagName('img');
        var href = nearestAncestorHref(nodes[0]);
    }
    var s = link +  " " + imgsrc + " " + href;
    self.postMessage(s);
});
function nearestAncestorHref(node){
    while(node && !node.href) node=node.parentNode
    return node && node.href
}

但console.log返回它在整个页面中找到的绝对第一个A HREF。例如,我在bbc.com上尝试了一个随机图像,结果函数返回http://www.bbc.com而不是我点击的图像的链接。

为什么我可以使用node.HREF和node.SRC同时获得A HREF和IMG SRC?因为我无法从Firefox SDK中获得这两个值,而是一次只能获得一个值。

这将返回具有href的最近祖先的href,如果它到达<HTML>根而没有找到任何内容,则返回null

function nearestAncestorHref(node){
  while(node && !node.href) node=node.parentNode
  return node && node.href
}
function getHref(node) {
    if(node.href != null) {
        return node.href;
    } else {
        if(node.parentNode != null) {
             return getHref(node.parentNode);  
        } 
    }
    return null;
}

http://jsfiddle.net/8qy95vzv/

 var href = document.getElementById('some_div').parentNode;

http://jsfiddle.net/ox8r377v/