$('a').each(function() {
var a = new RegExp('/' + window.location.host + '/');
if(!a.test(this.href)) {
$(this).click(function(event) {
event.preventDefault();
event.stopPropagation();
window.open(this.href, '_blank');
});
}
});
你可以使用 HTML 直接完成,但这属于无效的标记,此方法可以在不使用无效代码和不必要标记的情况下完成任务。
或者,你仍然可以避免验证问题,只需将 class target=_blank 附加到 href 属性以 http:// 开头的任何链接上。下面的示例仅针对 #content 区域中的链接。如果你的菜单是动态的并创建完整的 URL,那么这样的限定可能是个好主意。
$("#content a[href^='http://']").attr("target","_blank");
另请注意,有许多不同的方法可以 仅定位外部链接。
如果你只想定位特定 URL,可以使用稍微不同的版本(我使用 rel 标签“external”)
$('A[rel="external"]')
.click( function() {
window.open( $(this).attr('href') );
return false;
});
不错的代码片段,Paul,这要好得多,并且非常简洁,在 XHTML 1 strict 中也通过了验证。是时候让世界停止使用侵入式的 JavaScript 了。
谢谢,Paul!这非常有用。
非常有用的技巧。非常感谢
我认为以下内容会增加很大的价值。我尝试忽略任何属于该站点的链接,并直接识别外部链接。
有没有办法调整弹出窗口的大小?
不错的解决方案
太棒了。这正是我为客户网站所需的东西。感谢 Paul,这非常有效。
这是我们正在使用的与 Paul 的代码类似的代码片段,并且增加了对 target “_blank”、 “parent”、 “top” 和 “popup” 的支持
如果代码乱码,请在此处获取:http://www.id3.co.th/js/lib.js(查找“链接和弹出窗口”)
然后,在你的页面中通过在你的 $(document).ready(function(){ 中添加 externallinks(); 来激活它
如果代码乱码,请查看 http://www.id3.co.th/ 的源代码(查找“.ready(function”)
希望这有帮助!
对于无 jQuery 的情况,可以使用 window.onload = externallinks;
如果你有充分的理由在新窗口中打开某些链接,并且想要使用纯 HTML,你可以切换到 HTML5 文档类型。
生活中的小事!代码简短,解决方案巨大!
使用 target=”_blank”,然后忘记 XHTML strict 吧,它已经过时了。
现在每个人都在谈论 HTML5……为什么还要浪费时间在这些微不足道的问题上?
我同意你的观点,当我们已经有了 target”_blank” 时,为什么要费心编写脚本,而且它也适用于禁用 JS 的用户!也许这不再是一个问题了?
因为,即使在 2010 年,人们仍然不理解验证的作用。它是一种工具,而不是一项成就。还记得合规徽章的热潮吗?
如果你使用 jQuery,则应该使用 delegate。这样,你就可以在 body 元素上创建一个事件绑定,而不是数百个,每个链接一个。
代码如下所示
$(‘body’).delegate(“a”,”click”,function() {
var a = new RegExp(‘/’ + window.location.host + ‘/’);
if(!a.test(this.href)) {
event.preventDefault();
event.stopPropagation();
window.open(this.href, ‘_blank’);
}
});
从技术上讲,这是一个不错的解决方案。
另一方面,它可能会诱使设计师在任何时候都使用它。除非绝对必要或对用户非常友好,否则切勿在新窗口中打开链接。让所有外部链接在新窗口中打开既不必要也不友好。
对于 MooTools,它非常相似
很好。我认为,这篇文章很好地描述了它,并且也是一个完美的解决方案!!!
http://praveenbattula.blogspot.com/2010/06/open-all-anchor-links-in-new-window.html
你好……
我能否获得任何代码来动态弹出 iframe 内容?……
谢谢
@nachomaans
我该如何复制你提供的代码到该部分。但我不知道是否理解了这一行:然后,在你的页面中通过在你的 $(document).ready(function(){ 中添加 externallinks(); 来激活它
我可以在哪里使用它?
顺便说一句,我在我的 WordPress 博客中尝试过
我认为我的评论相对于这篇文章来说有点晚了,但我基于这篇文章的知识和过去一周左右关于 jQuery 插件开发的阅读,编写了一个小型 jQuery 插件来实现相同的功能。请查看插件和相关文章的链接,希望它符合 jQuery 插件开发标准。
http://www.uipress.com/extlink-a-jquery-plugin-to-add-target_blank-to-external-and-file-links/
此致,
Bilal Awan
一个小优化:由于 RegExp 不会改变,因此将其移出循环,以便仅定义(和编译)一次。在每次循环发生时重新定义它毫无意义。
此外,值得注意的是,这仅在所有内部链接都具有完整的绝对路径时才有效。因为它将其与主机名进行比较,因此每个链接都必须包含主机名。表单 /link/to/something 或 link/to/something 中的相对链接将被视为外部链接。
我忘记了代码片段中的美元符号!以下是正确的代码
如何使用此代码?
我对 jQuery 一无所知,我只是将该代码粘贴到 HTML 头部,然后在 Chrome Web Inspector 中收到此错误
el Abee.. 你必须首先包含实际的 jQuery 库,然后确保你粘贴的实际代码位于 <script></script> 标记内,并且这两个标记位于 <head></head> 标记内。顺便说一句,包含 jQuery 也需要在 head 标记之间完成
先生,我遇到了一个问题,我的页面上有缩略图,当用户点击它时,我想在新窗口选项卡的 div 中打开该缩略图的较大图像
极好的提示,谢谢
以下是我们的做法
<a href=”somewhere” class=”newWindow”>
在jQuery文件中,我们使用
function setupNewWindow(){
$(‘.newWindow’).click(function(){window.open($(this).attr(‘href’)); return false;});
}
我尝试了所有可能用到的 $(‘a[rel=”external”]) 的变体。我使用了双引号、单引号,尝试使用 [rel^=”external”] 来查找以某个字符串开头的链接,我复制粘贴了代码而不是手动输入。我确保了任意jQuery代码都能在这个脚本的位置正常工作。我确保我的WordPress enqueue_script 正常工作。我尝试了其他网站上的类似脚本。我谷歌搜索到手指都流血了……
……但仍然没有任何涉及使用 [rel=””] 的方法对我有效。我正在使用来自jQuery CDN的最新jQuery库(我在写这个评论时,是1.7.1压缩版)。我错过了什么吗?这个版本的jQuery无法识别 [rel=””] 吗?
如果我删除 [rel=”external”],它就能工作,但会应用于所有链接(这是预期的,因为没有条件)。我写了一些其他的代码可以工作,它是派生出来的,但是 [rel=”external”] 看起来更优雅,我更愿意使用它。
这是我的脚本
刚刚注意到我上面评论中第一行的一个问题。$(‘a[rel=”external”]) 应该写成 $(‘a[rel=”external”]’)。
关于为什么会发生这种情况,有什么想法吗?:-(
抱歉,我可能错了,但这里显示的示例如果带有“external”的属性是其他属性,比如“nofollow”或“author”,则无法正常工作。我过去在博客中使用过一些不同的代码,是从插件中获取的
我尝试了所有方法,但都无法使其工作……直到我尝试了Konstantin的代码,它完美地工作并且加载速度非常快!非常感谢,非常感谢……节省了大量时间和精力。问题:它有效吗?之前我一直在使用简单的javascript,但速度很慢而且很笨拙……(如下)。
再次感谢Konstantin!!!
这很好用,但代码会干扰某些Google Analytics功能。例如,当使用此代码时,我们丢失了所有出站链接跟踪。
该死!你找到了解决方法吗?
我的网站有多个域名,以上方法都不能解决任何域名的方案,无论是否有www。
我必须说我喜欢你的代码,但我想用更少的代码实现相同的效果。
因此,这是我在一个正在更新的项目中使用的代码。
$(function() {
$(“.targetBlank”).click(function() {
window.open(this.href);
return false;
});
});
你可以使用这个
$(document).ready(function() {
$(‘.targetBlank’).click(function() {
$(this).target = “_blank”;
window.open(this.href);
return false;
});
});
但我经过测试后选择了第一个。你只需要在链接中添加 [class=”targetBlank”]。
我只是想和你们一起玩得开心。顺便说一句,很棒的文章。:D
我只是包含脚本以直接获取target值(_top、_parent、_self、_blank……)。
$(‘a’).each(function() {
var a = new RegExp(‘/’ + window.location.host + ‘/’);
var targets = this.target;
if(!a.test(this.href)) {
$(this).click(function(event) {
window.open(this.href, targets);
return false;
});
}
});
非常好,但你现在应该使用最新的jQuery代码更新这篇文章,以使所有外部链接都为rel=”nofollow”。
可能是最有效的
$(this).attr(“target”, “_blank”); 你可以使用这个。它工作正常……有任何疑问,请给我留言 我…[email protected]
喜欢它 - 谢谢你的代码片段!
很好。但是,我想在新窗口中打开外部链接,除了某些链接。这些链接应该在_self目标中打开。请帮我一下。
我非常喜欢这个解决方案,很棒的想法。
这是一个非常愚蠢的陈述,因为示例中的代码添加了“无效标记”。无论它是否在文档源代码中,当在浏览器中呈现时,它无论如何都是文档的一部分。
谢谢大家……你们太棒了!
非常感谢,这节省了我很多时间。并且我自己也学到了一些东西!
实际上,这可以简化为以下代码
HTMLAnchorElement
还具有hostname
属性(由于某些跨浏览器问题,它比host
更受欢迎——例如,即使在href
中未指定端口80,IE8也会将端口80附加到主机名)。一个无需类或
rel
属性即可定位所有外部链接的选项注意:这在IE中尚未经过测试,因为坦率地说,这本身就是一个糟糕的主意,我不在乎链接在旧版浏览器中是否像链接应该工作的那样工作。
这篇文章对我有很大帮助,谢谢。我现在可以轻松地将博客徽章添加到我的网站,并且知道它们会在新窗口中打开。
如果我可以更改徽章代码以使其在新链接中打开,那么任何人都可以做到!
我尝试过Mike的代码,但它不起作用,还有其他人遇到这种情况吗?
嗨,Jacob Magnusson,你的代码工作正常,但它只适用于rel=”external”,它不适用于rel=”external nofollow”之类的情况,有什么解决方案吗?抱歉,我不太懂javascript,只需要帮助。谢谢。
大家好,
我似乎无法弄清楚如何在拖放后在新窗口中打开这个链接。这是一个拖放功能。它可以工作,但不会打开新窗口。
谁能帮我解决这个问题?
大家好,我试图在SharePoint 2007 Webpart页面上执行此操作,我使用页面查看器Web部件来包含我们经常使用的链接页面。现在,我想在CEWP中放入一些代码,以便单击任何这些链接时在新页面中打开。尝试了上面你的代码,但没有效果。有什么想法吗?
如果Iframe包含外部内容,则如何读取<a href链接块,因为安全错误
如果我想在显示站点的同一个div中打开外部链接(后续页面),而不跳转到下一页或不更改URL怎么办。只需要在显示外部站点的同一个div中打开即可。
如果你像我们一样,动态地通过ajax加载链接,那么你可以在文档加载后为每个添加的链接添加target=”_blank”。
或者你可以将这块精心烹制的代码添加到你的document ready函数中。
无论何时你在网站上的任何位置“mousedown”,并且“mousedown”的目标是href属性中没有mailto或javascript的a元素,请检查它是否指向外部页面。如果是,则将其属性target设置为“_blank”。由于它绑定到文档而不是a元素本身,因此链接是否在document ready函数之后加载并不重要。
Alfred,我有一个情况。
我在我的“showresult”div中获得了结果。如果我想在点击链接时在同一个div“showresult”中显示其他页面,我应该怎么做?我不想让链接在新窗口或同一窗口中打开,我想让它们在同一个div“showresult”中打开。
如何使用javascript程序打开chrome窗口
如果网页在火狐浏览器中打开,并希望通过点击火狐浏览器中打开的页面来打开chrome
感谢你的提示,Chris。第二个jQuery代码片段,对所需的特定URL进行了一些修改,使得在新的标签页中打开特定URL的重定向变得很容易——在一个WordPress网站上,我可以添加自定义javascript,但不容易更改重定向插件(或任何相关的选项)。因此,jQuery在URL到达插件之前将“_blank”追加到URL,然后重定向插件执行其工作。干杯!
使用原生JS
这是一个更简单的jQuery代码
所有这些代码片段都很棒。我遇到了一种情况,我需要识别多个主机名,它们是内部链接,不应该在新窗口中打开。我不确定如何修改这些代码示例以适应这种情况。任何建议将不胜感激。
这个代码片段存在一个主要问题,因为它没有考虑没有href属性的锚标签。这是一个设计决策,即使用标签作为按钮,这些按钮只执行JavaScript操作。
所以正确的代码应该是这样的
有没有办法防止它在由插件添加的
<a href="javascript:void(0);"
链接上工作(我认为是为了使元素可点击),并且不应该在新页面中打开?我对JavaScript不太熟悉,无法为此类型的链接添加排除项,但如果有人可以提供帮助,我将不胜感激!我了解了一种应用脚本的方法,使其不会对我的网站上的“javascript:void(0);”“链接”造成问题,但它禁用了Google Analytics中外部链接的跟踪(Google Tag Manager实现,使用“点击 - 仅链接”触发器,该触发器使用正则表达式在URL不包含域名时触发)。
有没有办法更改脚本(或我的通用分析GA/GTM设置),以便在Google Analytics(UA,而不是GA4)中仍然可以跟踪外部链接点击?