我使用window.onclick
代码获取所有(当前和未来)锚点并应用我的自定义代码,这确实有效 -
window.onclick = clickEvent;
function clickEvent(e){
e = e || window.event;
var t = e.target || e.srcElement
console.log(t);
if ( t.name || t.href ){
if( typeof t.href == "string" && (t.href.substr(0,4) == 'http' || t.href.substr(0,5) == 'https') ){
if( t.attributes.href.value !== "#" ){
alert('The url is - '+t.href);
}
e.preventDefault;
return false; // no further action for this click
}
}
return true; // process click as normal
}
但是当<a>
标记内部有<span>
标记时 - 它无法正常工作。链接像往常一样打开。
<a href="http://test.com"><span>Test Url</span></a>
这是查看它的JSfiddle - http://jsfiddle.net/aajahid/3edcfm12/
原因是 - t
(e.target
)变量返回<span>
标记,而不是<a>
标记。出于这个原因,我没有看到任何阻止网址打开并将自定义功能应用于其中的方法。
问题是 - 如何防止带有span(或任何其他标签)的链接打开?
答案 0 :(得分:2)
诀窍是检查跨度,如果存在,请将变量t
设置为父变量,如下所示:
if (t.nodeName == 'SPAN' && t.parentNode.nodeName == 'A') {
t = t.parentNode;
}
但为什么不直接获取文档中的所有链接,如下所示:
var links= document.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
....
}
这样,您无需担心自己点击了哪种标记。 Here's an example