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添加更多链接)。您的解决方案确实有效,但我认为可能会有更稳定的解决方案。但我想你的解决办法是唯一的办法