Javascript 如何防止所有链接(其中有一个跨度标记)打开?

Javascript 如何防止所有链接(其中有一个跨度标记)打开?,javascript,html,onclicklistener,Javascript,Html,Onclicklistener,我正在使用窗口。单击代码以获取所有(当前和未来)锚定并应用我的自定义代码,该自定义代码可以- window.onclick = clickEvent; function clickEvent(e){ e = e || window.event; var t = e.target || e.srcElement console.log(t); if ( t.name || t.href ){ i

我正在使用
窗口。单击
代码以获取所有(当前和未来)锚定并应用我的自定义代码,该自定义代码可以-

    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
    }
但是当一个

这是JSFIDLE来检查它-

原因是,
t
e.target
)变量返回的是
标记,而不是
标记。出于这个原因,我看不到任何方法可以阻止url打开并对其应用我的自定义函数


问题是-如何防止那些带有span(或任何其他标记)的链接打开?

诀窍是检查span,如果存在,将变量
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++) { 
    ....
}

但为什么不直接获取文档中的所有链接,就像这样:

if (t.nodeName == 'SPAN' && t.parentNode.nodeName == 'A') {
    t = t.parentNode;
}
var links= document.getElementsByTagName("a"); 
for (var i = 0; i < links.length; i++) { 
    ....
}
var links=document.getElementsByTagName(“a”);
对于(var i=0;i

这样,你就不必担心你点击了什么样的标签

我使用了
窗口。单击
甚至可以捕获所有当前和将来的链接(将来将使用ajax向dom添加更多链接)。您的解决方案确实有效,但我认为可能会有更稳定的解决方案。但我想你的解决办法是唯一的办法