jQuery为传出链接添加target =“_ blank”

时间:2011-10-26 10:55:45

标签: javascript jquery

我需要一些帮助来创建jquery脚本:)
我的HTML上有一些像这样的链接。

<a href="http://google.com">Google</a>
<a href="/">Home</a>
<a href="http://www.gusdecool.com/">Home</a>
<a href="contactus.html">Contact Us</a>

现在我希望jQuery检查我页面上的所有链接。如果该链接在我的服务器之外(我的服务器是gusdecool.com)。然后添加target="_blank"。结果将是这样的

<a href="http://google.com" target="_blank">Google</a>
<a href="/">Home</a>
<a href="http://www.gusdecool.com/">Home</a>
<a href="contactus.html">Contact Us</a>

15 个答案:

答案 0 :(得分:46)

假设所有外部链接都以 http:// 开头,您可以这样做:

$('a[href^="http://"]').not('a[href*=gusdecool]').attr('target','_blank');

答案 1 :(得分:15)

$('a').each(function() {
   var a = new RegExp('/' + window.location.host + '/');
   if (!a.test(this.href)) {
      $(this).attr("target","_blank");
   }
});

这是来自css-tricks.com,似乎工作得很好。

答案 2 :(得分:14)

$('a[href^=http]:not([href^=http://www.gusdecool.com/])').attr('target','_blank');

当然,只有当所有外部链接都以http协议开头时,这才有效。您应该调整此代码以满足您的需求(例如没有协议或不同协议的链接)。

更新:

$('a[href^=http]:not([href^=http://www.gusdecool.com],[href^=http://gusdecool.com])')
    .add('a[href^=www]:not([href^=www.gusdecool.com])')
        .attr('target','_blank');

它选择所有a元素,其href属性以网页地址开头(有或没有协议),并且不指向您网站的地址并更改其target属性为_blank

答案 3 :(得分:6)

如果你有一个子域,这个函数似乎更容易:

$('a').attr('target', function() {
  if(this.host == location.host) return '_self'
  else return '_blank'
});

答案 4 :(得分:3)

jQuery(document).ready(function(){
    target_luar();
});    
function target_luar(){
    try{
        if(top.location != location) {
            jQuery("a[href^='http']")
              .not("[href*='"+location.host+"']")
              .attr('target','_blank');
        }
    } catch(err) { }
}

演示:Demo jQuery External Link

答案 5 :(得分:3)

在新窗口中打开外部链接的全局功能:

$(function(){ // document ready

    $("a").filter(function () {
        return this.hostname && this.hostname !== location.hostname;
    }).each(function () {
        $(this).attr({
            target: "_blank",
            title: "Visit " + this.href + " (click to open in a new window)"
        });
    });

});

答案 6 :(得分:2)

将它们放在一起,我们得到以下内容。等待所有加载,仅选择以http或https开头的链接,检查链接是否指向相同的域(内部)或另一个域(外部),添加适当的如果找到匹配项,则定位。

$ docker --version
Docker version 18.03.0-ce, build 0520e24302

答案 7 :(得分:1)

您可以使用jQuery的$ .each函数迭代所有Anchor标记,执行所需的检查并使用$(this)设置“target”属性.attr(“target”,“_ blank”);

示例(未经测试但应该有效):

$('a').each(function(index) {
    var link = $(this).attr("href");
    if(link.substring(0,7) == "http://")
        $(this).attr("target", "_blank");
});

晒。

答案 8 :(得分:0)

检查每个linkobject $(link).attr(“href”),如果以http://开头,那么它是一个外向链接(?)。然后分配.attr(“target”,“_ blank”)。

$(a).function(){
    if($(this).attr("href").substring(0,3) == "http" && <!-- CHECK ITS NOT YOUR SITE URL -->){
       $(this).attr("target", "_blank"); 
    }
};

希望这有帮助。

答案 9 :(得分:0)

这是一个使用原始JS(而不是jQuery)演示答案的小提琴:http://jsfiddle.net/Xwqmm/

这是代码:

var as = document.getElementsByTagName('a');
var re = /^https?:\/\/([^\/]*)\//;
for (var i = 0, l = as.length; i < l; i++) {
    var href = as[i].href;
    var matches = href.match(re);
    if (matches[1] && matches[1] != "gusdecool.com") {
        as[i].setAttribute("target","_blank");
    }
}

答案 10 :(得分:0)

您可以使用filter -

$("a").filter(function () {
    return this.indexOf('http://') > -1 && this.indexOf('gusdecool') == -1 
}).attr("target","_blank");  

答案 11 :(得分:0)

尝试:

$('a[href^="http://"]')
        .not('a[href*='+ location.hostname +']')
        .attr('target','_blank');

答案 12 :(得分:0)

这是一个很棒的网站,我从中学到了很多东西:

如果您采用这种方式,则无需担心http或https(在开发过程中很方便)

$('a[href^="http"]')
        .not('a[href*='+ location.hostname +']')
        .attr('target','_blank');

答案 13 :(得分:0)

您可以看到httphttps的所有外部链接


jQuery('a[href^="https://"],a[href^="http://"]').not("a[href*='"+ window.location.host +"']").each(function() {
  
    console.log(jQuery(this).attr('href'))
});

您可以像这样添加_blank

jQuery('a[href^="https://"],a[href^="http://"]').not("a[href*='"+ window.location.host +"']").attr('_target','blank');

答案 14 :(得分:-1)

<div id="myLinks"><a href="http://google.com">Google</a><a href="/">Home</a><a href="http://www.gusdecool.com/">Home</a>
<a href="contactus.html">Contact Us</a></div>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#myLinks a').attr('target', '_blank');
});
</script>