打开除域外的新选项卡中打开的所有外部链接。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

我正在尝试在新窗口中打开网站上的所有外部链接。但是,该网站有2个版本。例如商店和主要网站。因此,在主站点上,我们可能会有链接到http://store.site.com

我在这里有一些代码可以让我在新窗口中打开所有外部链接。但是,我希望能够排除某些域名。就像我上面提到的那个。

这是代码:

$(document).ready(function() {
   $("a[href^=http]").each(function(){
      if(this.href.indexOf(location.hostname) == -1) {
         $(this).attr({
            target: "_blank",
            title: "Opens in a new window"
         });
      }
   })
});

我是JS / Jquery的新手,所以很多信息都很棒。

提问于
用户回答回答于

我想我会这样做:

    $(document).ready(function() {
      $("a[href^=http]").each(function(){
         if(this.href.indexOf(location.hostname) == -1 && this.href.indexOf("store.domain.com") == -1 && this.href.indexOf("other.domain.rule") == -1) {
            $(this).attr({
               target: "_blank",
               title: "Opens in a new window"
           });
         }
       })
    });

这有点手动,但是,如果您不想处理拆分字符串和数组,这就是解决方案。我相信这会有帮助的。

编辑:此外,您还可以使用Technfoobar的解决方案触发链接单击。这将有助于您的网站性能。

用户回答回答于

您是否能够编辑HTML以获得更好的钩子,可能是一个点击事件?如果我需要在内部或外部之间分隔某些链接,我将在HTML元素上应用rel值。

    <a href="URL" rel="external">Link</a>

然后在你的JavaScript中

    $('a[rel="external"]').click( function(event) {
     event.stopPropagation();
     window.open( $(this).attr('href') );
     return false;
    });

编辑:看到你已经有很多链接,这个怎么样..

    var a = new RegExp('http:\/\/store.blah.com');

    $('a').each(function() {

      if(a.test(this.href)) {
        $(this).click(function(event) {
         event.preventDefault();
         event.stopPropagation();
         window.open(this.href, '_blank');
        });
      }

    });

扫码关注云+社区

领取腾讯云代金券