Javascript 捕捉绝对位置元素上的单击事件

Javascript 捕捉绝对位置元素上的单击事件,javascript,Javascript,我有div,上面是带有绝对位置div的链接。我需要捕捉链接上的点击事件并获得“href”属性。我不想只使用普通JavaScript库。可能吗 我尝试过类似的东西,但它只捕捉到链接外的div window.addEventListener('load', function () { document.addEventListener('click', $openExternalLink, false); }); function $openExternalLink(e) { a

我有div,上面是带有绝对位置div的链接。我需要捕捉链接上的点击事件并获得“href”属性。我不想只使用普通JavaScript库。可能吗

我尝试过类似的东西,但它只捕捉到链接外的div

window.addEventListener('load', function ()
{
    document.addEventListener('click', $openExternalLink, false);
});


function $openExternalLink(e) {
    alert(e.target.tagName);
}
HTML:

文本
也许这个结构很糟糕,不幸的是我无法影响它

多谢各位

document.onload = function() {
    var myLink = document.querySelector("a");
    myLink.addEventListener("click", function() {
        var href = this.href;
    })
}
只需将事件侦听器添加到您的锚,然后使用
this.href
(或this.getAttribute(“href”))获取其
href
属性

我想你对JavaScript相当陌生吧?如果是这样,一定要去看看

另外,我刚刚想到的一点是,如果您想使用函数处理链接(看起来您是这样做的),请执行以下操作:

document.onload = function() {
    var myLink = document.querySelector("a");
    myLink.addEventListener("click", function(e) {
        e.preventDefault(); // Makes the event prevent the default link behaviour
        var href = this.href;
        externalLink(href);
    })
}
externalLink(href) {
    // Do something with your link.
    // perhaps, window.location = href (or whatever)
}
要用于页面上的所有链接(根据您的评论),请执行以下操作:

document.onload = function() {
    var links = document.querySelectorAll("a");
    var i = 0, count = links.length;
    for (i; i < count; i++) {
        links[i].addEventListener("click", function(e) {
            e.preventDefault();
            externalLink(this.href);
        })
    }
}
externalLink(href) {
    // Do something with your link.
    // perhaps, window.location = href (or whatever)
}
document.onload=function(){
var links=document.querySelectorAll(“a”);
变量i=0,计数=links.length;
对于(i;i

使用
querySelectorAll
以文档中的所有锚定标记为目标,然后对它们进行循环,为每个锚定标记添加一个事件侦听器。请记住,如果您还想支持IE8,这个脚本需要一些调整。(使用
attachEvent(“onclick”…
而不是
addEventListener
,并在事件中用
链接[i]
替换

target
属性是被单击的元素-在您的例子中是
div
。您可以使用
e.target.parentNode.href
获取链接href,或者只需将单击处理程序附加到链接并查找
e.currentTarget.href
。为什么
这个.getAttribute(“href”)
this.href
相比?嗯,我只是习惯了某些事情,但你是对的。
this.href
同样有意义,而且更短。我将把它换掉。很好,但是,它只适用于页面上的第一个链接。对所有链接有任何简单的修改吗?是的,使用
querySelectorAll
并对它们进行循环。我我会把它加到我的回答中。
document.onload = function() {
    var links = document.querySelectorAll("a");
    var i = 0, count = links.length;
    for (i; i < count; i++) {
        links[i].addEventListener("click", function(e) {
            e.preventDefault();
            externalLink(this.href);
        })
    }
}
externalLink(href) {
    // Do something with your link.
    // perhaps, window.location = href (or whatever)
}