Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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链接元素_Javascript_Window_Element - Fatal编程技术网

图像上的JavaScript链接元素

图像上的JavaScript链接元素,javascript,window,element,Javascript,Window,Element,我试图截获所有a链接点击以进行一些额外的工作,这对于独立的a链接很好,但是当它包含img时,例如img标记会被返回 是否有办法检查上面的元素是否也是一个a链接,或者是否有其他方法处理此问题 JS: document.onclick = function (e) { e = e || window.event; var element = e.target || e.srcElement; if (element.tagName == 'A') { windo

我试图截获所有
a
链接点击以进行一些额外的工作,这对于独立的a链接很好,但是当它包含
img
时,例如
img
标记会被返回

是否有办法检查上面的元素是否也是一个
a
链接,或者是否有其他方法处理此问题

JS:

  document.onclick = function (e) {
  e = e ||  window.event;
  var element = e.target || e.srcElement;

    if (element.tagName == 'A') {
      window.open(element.href, "_system");
      return false;
    }
  };

您可以向上遍历单击节点的父节点,以查看祖先是否是
标记

...
var element = e.target || e.srcElement;
while (element.tagName != 'A' && element.parentNode) {
    element = element.parentNode;
}
if (element.tagName == 'A') {
...

您可以向上遍历单击节点的父节点,以查看祖先是否是
标记

...
var element = e.target || e.srcElement;
while (element.tagName != 'A' && element.parentNode) {
    element = element.parentNode;
}
if (element.tagName == 'A') {
...

您应该添加另一个条件来检查当前单击的元素是否是
a
元素的子元素

您可以使用方法

元素.closest()
方法返回与参数中给定的选择器匹配的当前元素(或当前元素本身)的最近祖先。如果没有这样的祖先,它将返回null

条件如下所示:

if (element.tagName == 'A' || element.closest('a') != null) {
     window.open(element.closest('a').href, "_system"); //Using the parent a link `href`
     return false;
}
希望这有帮助


document.onclick=函数(e){
e=e | | window.event;
var元素=e.target | | e.src元素;
if(element.tagName='A'| | element.closest('A')!=null){
警报(“使用href:+element.closest('a').href打开”);
返回false;
}
};

下面的Google文本链接在单击时返回一个,正确


单击下面的Bing图像链接时返回IMG,不正确


您应该添加另一个条件来检查当前单击的元素是否是
元素的子元素

您可以使用方法

元素.closest()
方法返回与参数中给定的选择器匹配的当前元素(或当前元素本身)的最近祖先。如果没有这样的祖先,它将返回null

条件如下所示:

if (element.tagName == 'A' || element.closest('a') != null) {
     window.open(element.closest('a').href, "_system"); //Using the parent a link `href`
     return false;
}
希望这有帮助


document.onclick=函数(e){
e=e | | window.event;
var元素=e.target | | e.src元素;
if(element.tagName='A'| | element.closest('A')!=null){
警报(“使用href:+element.closest('a').href打开”);
返回false;
}
};

下面的Google文本链接在单击时返回一个,正确


单击下面的Bing图像链接时返回IMG,不正确


您可以将处理程序附加到锚定标记的单击事件上,而不是整个文档上,这样您就不需要检查事件目标

var anchorTags = document.getElementsByClassName("classname");

var myEventHandler = function() {
    // stuff
};

for (var i = 0; i < anchorTags.length; i++) {
    anchorTags[i].onclick = myEventHandler;
}
var-anchorTags=document.getElementsByClassName(“classname”);
var myEventHandler=函数(){
//东西
};
对于(变量i=0;i
您可以将处理程序附加到锚定标记的单击事件上,而不是整个文档上,这样您就不需要检查事件目标

var anchorTags = document.getElementsByClassName("classname");

var myEventHandler = function() {
    // stuff
};

for (var i = 0; i < anchorTags.length; i++) {
    anchorTags[i].onclick = myEventHandler;
}
var-anchorTags=document.getElementsByClassName(“classname”);
var myEventHandler=函数(){
//东西
};
对于(变量i=0;i< /代码> 我不确定是否需要捕获所有的点击,但是如果你想捕获实际点击的锚标签,你可以考虑下面的方法。

var-anchors=document.getElementsByTagName('a');
for(变量i=0,锚定;锚定=锚定[i];i++){
anchor.addEventListener('click',函数(e){
e=e | | window.event;
//抓取启动事件的元素,即锚定标记。
var元素=这个;
警报(element.tagName);
如果(element.tagName=='A'){
window.open(element.href,“_system”);
返回false;
}
})

} <代码> > p>我不确定是否需要捕获所有的点击,但是如果你想捕获实际点击的锚标签,你可以考虑下面的方法。

var-anchors=document.getElementsByTagName('a');
for(变量i=0,锚定;锚定=锚定[i];i++){
anchor.addEventListener('click',函数(e){
e=e | | window.event;
//抓取启动事件的元素,即锚定标记。
var元素=这个;
警报(element.tagName);
如果(element.tagName=='A'){
window.open(element.href,“_system”);
返回false;
}
})

}
您尝试过event.currentTarget吗?请尝试为您的案例制作一个提琴,因为您的代码应该只过滤
a
标记。添加了JSFIDLE来解释发生了什么。您可以使用element.parentNode并检查其标记名您尝试过event.currentTarget吗?请尝试为您的案例制作一个提琴,因为您的代码应该只过滤
a
标记。添加了JSFIDLE来解释发生了什么。您可以使用element.parentNode并检查它的标记名