获取不带Jquery的嵌套父HREF节点
Get nested parent HREF node without Jquery
我正在开发一个简单的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/
相关文章:
- 节点导出返回一个空对象
- 可以前端maven插件使用节点,npm已经安装
- 在jstree中,如何将指定的节点集中到大型树上
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 在单击href链接的同时下载文件
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 如果href包含X,请更改href
- 锚点元素的href属性自动更改
- 锚点元素不't使用svg时,请打开EDGE上的href
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 获取不带Jquery的嵌套父HREF节点
- 在查询中自动将节点添加到href,并取消默认值
- 删除和添加href中的节点
- 在AJAX驱动的页面上,基于特定href删除节点时出现问题
- 从树视图中选定的节点(href值)获取JSON
- 如何在Gojs中的节点内部添加href
- 替换& lt; li>在for循环中使用href将节点放入锚