Html 使用javascript拦截所有文档链接点击

Html 使用javascript拦截所有文档链接点击,html,internet-explorer,firefox,javascript-events,Html,Internet Explorer,Firefox,Javascript Events,如何拦截文档中的链接单击? 它必须是跨平台的 我在找这样的东西: // content is a div with innerHTML var content = document.getElementById("ControlPanelContent"); content.addEventListener("click", ContentClick, false); function ContentClick(event) { if(event.href == "http://

如何拦截文档中的链接单击? 它必须是跨平台的

我在找这样的东西:

// content is a div with innerHTML
var content = document.getElementById("ControlPanelContent");

content.addEventListener("click", ContentClick, false);

 function ContentClick(event) {

    if(event.href == "http://oldurl")
  {
     event.href = "http://newurl";
  }
} 

提前感谢您的帮助。

for(var ls=document.links,numLinks=ls.length,i=0;i我刚刚发现了这一点,它可能会帮助一些人。除了拦截之外,如果您想禁止链接加载其他页面或重新加载当前页面,只需将href设置为“#”(如内部页面引用前缀中所示)。现在,您可以在停留在同一页面时使用链接来调用函数。

在使用页面时生成链接的情况如何?在当今更复杂的前端框架中,这种情况经常发生

for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){
    ls[i].href= "...torture puppies here...";
}
正确的解决方案可能是将click事件侦听器放在文档上。这是因为元素上的事件传播到它们的父元素,并且链接实际上是由最顶端的父元素执行的

这将适用于所有链接,无论它们是与页面一起加载的,还是在任何时间点在前端动态生成的

function interceptClickEvent(e) {
    var href;
    var target = e.target || e.srcElement;
    if (target.tagName === 'A') {
        href = target.getAttribute('href');

        //put your logic here...
        if (true) {

           //tell the browser not to respond to the link click
           e.preventDefault();
        }
    }
}


//listen for link click events at the document level
if (document.addEventListener) {
    document.addEventListener('click', interceptClickEvent);
} else if (document.attachEvent) {
    document.attachEvent('onclick', interceptClickEvent);
}

更新:这不是最好的方法。使用
href=“javascript:void(0)”
通常更好,因为它不会强制重新加载页面。请注意,这两种方法都会阻止用户在链接上使用右键单击操作(在新选项卡中打开,等等)这是一个更好的答案,因为它创建了更少的事件处理程序,并涵盖了动态生成链接的情况,例如在我们正在处理的CMS中。请注意,
可以围绕其他元素,在这种情况下,事件目标实际上不是
a
。还请注意,如果用户使用
来关注e链接,然后按
。如果要截取更改页面的所有内容,则需要替换所有的a标记和表单标记,并使用MutationObserver检测动态元素。对于嵌套元素,如
中的
,可以使用
.closest()
If(target.tagName!=“a”)target=target.closest('a');
function interceptClickEvent(e) {
    var href;
    var target = e.target || e.srcElement;
    if (target.tagName === 'A') {
        href = target.getAttribute('href');

        //put your logic here...
        if (true) {

           //tell the browser not to respond to the link click
           e.preventDefault();
        }
    }
}


//listen for link click events at the document level
if (document.addEventListener) {
    document.addEventListener('click', interceptClickEvent);
} else if (document.attachEvent) {
    document.attachEvent('onclick', interceptClickEvent);
}