图像上的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并检查它的标记名