Javascript 如何检测用户单击内部或外部链接

Javascript 如何检测用户单击内部或外部链接,javascript,html,Javascript,Html,我需要知道用户是否点击了内部或外部链接来提醒他们。 我的网站上有许多内部和外部链接。 我的内部链接如下: <a href="about.php">about</a> <a href="tools/draw.php">draw graph</a> var externalLinks = document.querySelectorAll('a[href^="http"]'); for (var i = externalLinks.length-1;

我需要知道用户是否点击了内部或外部链接来提醒他们。
我的网站上有许多内部和外部链接。

我的内部链接如下:

<a href="about.php">about</a>
<a href="tools/draw.php">draw graph</a>
var externalLinks = document.querySelectorAll('a[href^="http"]');
for (var i = externalLinks.length-1; i >= 0; i--) {
    externalLinks[i].addEventListener("click", function() { alert(); }, false);
}

我只需要在单击外部链接时发出警报。

(我在这里介绍了两种方法:一种方法使用jQuery,另一种不使用jQuery。如果不想使用jQuery,请跳到粗体标题)

可以这样做的一种方法是,向每个外部链接添加一个类,然后将事件处理程序附加到该类中的所有内容,当您单击该链接时,该事件处理程序将发出警报。不过,这很乏味,因为您必须将类添加到每个外部链接中,而且对于用户生成的内容不会这样做

您可以使用jQuery和CSS选择器
a[href^=“http”]
,选择所有外部链接,然后附加一个事件处理程序,在单击它们时引发警报:

$('a[href^="http"]').click(function() {
    alert();
});
a[href^=“http”]
意味着“一个
a
标记有一个链接,该链接必须以“http”开头”。因此,我们在这里选择所有以
http
开头的元素,即每个外部链接,然后将其设置为当您单击它们时,会弹出一个警报

非jQuery方法

如果要在不使用jQuery的情况下执行此操作,则需要使用
document.querySelectorAll('a[href^=“http”]”)
并绑定该函数返回的数组中每个元素的单击事件。看起来是这样的:

<a href="about.php">about</a>
<a href="tools/draw.php">draw graph</a>
var externalLinks = document.querySelectorAll('a[href^="http"]');
for (var i = externalLinks.length-1; i >= 0; i--) {
    externalLinks[i].addEventListener("click", function() { alert(); }, false);
}
(我在这里包括了两个方法:一个方法使用jQuery,另一个不使用jQuery。如果不想使用jQuery,请跳到粗体标题)

可以这样做的一种方法是,向每个外部链接添加一个类,然后将事件处理程序附加到该类中的所有内容,当您单击该链接时,该事件处理程序将发出警报。不过,这很乏味,因为您必须将类添加到每个外部链接中,而且对于用户生成的内容不会这样做

您可以使用jQuery和CSS选择器
a[href^=“http”]
,选择所有外部链接,然后附加一个事件处理程序,在单击它们时引发警报:

$('a[href^="http"]').click(function() {
    alert();
});
a[href^=“http”]
意味着“一个
a
标记有一个链接,该链接必须以“http”开头”。因此,我们在这里选择所有以
http
开头的元素,即每个外部链接,然后将其设置为当您单击它们时,会弹出一个警报

非jQuery方法

如果要在不使用jQuery的情况下执行此操作,则需要使用
document.querySelectorAll('a[href^=“http”]”)
并绑定该函数返回的数组中每个元素的单击事件。看起来是这样的:

<a href="about.php">about</a>
<a href="tools/draw.php">draw graph</a>
var externalLinks = document.querySelectorAll('a[href^="http"]');
for (var i = externalLinks.length-1; i >= 0; i--) {
    externalLinks[i].addEventListener("click", function() { alert(); }, false);
}

最简单的方法是使用jQuery,为外部链接使用特殊类,或者通过在URL中检查“http://”

这样,如果使用特殊类:

$("a.external").on("click", function() {
    //de Do something special here, before going to the link.
    //de URL is: $(this).attr("href")
});
然后在HTML中:

<a href="http://external.link" class='external'>external link</a>

引用:我最初测试“http://”的方法有点慢,实际上是在
.attr(“href”)
上进行
indexOf
测试,所以我使用了@Matthew的选择器选择。忘记了插入符号的路线!在这一点上支持@Matthew,对于非jQuery的替代方案。

最简单的方法是使用jQuery,使用一个特殊的类作为外部链接,或者通过检查URL中的“http://”

这样,如果使用特殊类:

$("a.external").on("click", function() {
    //de Do something special here, before going to the link.
    //de URL is: $(this).attr("href")
});
然后在HTML中:

<a href="http://external.link" class='external'>external link</a>

引用:我最初测试“http://”的方法有点慢,实际上是在
.attr(“href”)
上进行
indexOf
测试,所以我使用了@Matthew的选择器选择。忘记了插入符号的路线!关于这一点,还有非jQuery的替代方案。

我必须在我自己的网站上从头开始做这件事,所以我将为您复制并粘贴它。它来自我的一个对象内部,因此如果我留下一些
这个
关键字,您可以删除它们

function leaving() {
    var links = document.anchors || document.links || document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        if ((links[i].getAttribute('href').indexOf('http') === 0 && links[i].getAttribute('href').indexOf('fleeceitout') < 0) && (links[i].getAttribute('href').indexOf('/') !== 0 && links[i].getAttribute('href').indexOf('#') !== 0) && links[i].className.indexOf('colorbox') < 0) {
            addEvent(links[i], 'click', this.action);
        }
    }
}

function action(evt) {
    var e = evt || window.event,
        link = (e.currentTarget) ? e.currentTarget : e.srcElement;
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        window.location.href = link.href;
        return;
    }
    var leave = confirm("You are now leaving the _______ website.  If you want to stay, click cancel.");
    if (leave) {
        window.location.href = link.href;
        return;
    } else {
        return leave;
    }
}
var addEvent = function (element, myEvent, fnc) {
    return ((element.attachEvent) ? element.attachEvent('on' + myEvent, fnc) : element.addEventListener(myEvent, fnc, false));
};
函数离开(){
var links=document.anchors | | | | | | document.getElementsByTagName('a');
对于(变量i=0;i

将“fleeceitout”的实例替换为您的站点域名(microsoft.com等),您就可以设置了。

我必须在自己的站点上从头开始执行此操作,因此我将为您复制并粘贴它。它来自我的一个对象内部,因此如果我留下一些
这个
关键字,您可以删除它们

function leaving() {
    var links = document.anchors || document.links || document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        if ((links[i].getAttribute('href').indexOf('http') === 0 && links[i].getAttribute('href').indexOf('fleeceitout') < 0) && (links[i].getAttribute('href').indexOf('/') !== 0 && links[i].getAttribute('href').indexOf('#') !== 0) && links[i].className.indexOf('colorbox') < 0) {
            addEvent(links[i], 'click', this.action);
        }
    }
}

function action(evt) {
    var e = evt || window.event,
        link = (e.currentTarget) ? e.currentTarget : e.srcElement;
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        window.location.href = link.href;
        return;
    }
    var leave = confirm("You are now leaving the _______ website.  If you want to stay, click cancel.");
    if (leave) {
        window.location.href = link.href;
        return;
    } else {
        return leave;
    }
}
var addEvent = function (element, myEvent, fnc) {
    return ((element.attachEvent) ? element.attachEvent('on' + myEvent, fnc) : element.addEventListener(myEvent, fnc, false));
};
$(document).ready(function() {
    $('a').click(function() {
        var returnType= true;
        var link = $(this).attr('href');
        if ( link.indexOf('http') >= 0 ) { 
            returnType=confirm('You are browsing to an external link.');
        }
        return returnType;
    });
 });`
函数离开(){
var links=document.anchors | | | | | | document.getElementsByTagName('a');
对于(变量i=0;i