如何防止所有链接(其中包含span标记)打开?

时间:2014-08-25 10:27:53

标签: javascript html onclicklistener

我使用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/

原因是 - te.target)变量返回<span>标记,而不是<a>标记。出于这个原因,我没有看到任何阻止网址打开并将自定义功能应用于其中的方法。

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

1 个答案:

答案 0 :(得分:2)

诀窍是检查跨度,如果存在,请将变量t设置为父变量,如下所示:

if (t.nodeName == 'SPAN' && t.parentNode.nodeName == 'A') {
    t = t.parentNode;
}

DEMO

但为什么不直接获取文档中的所有链接,如下所示:

var links= document.getElementsByTagName("a"); 
for (var i = 0; i < links.length; i++) { 
    ....
}

这样,您无需担心自己点击了哪种标记。 Here's an example