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