10

在不使用 jQuery 的情况下,使用 JavaScript 在新选项卡中打开所有外部链接(与当前域不匹配的 URL)的最佳方法是什么?

这是我当前使用的 jQuery:

// Open external links in new tab
$('a[href^=http]').click(function () {
    var a = new RegExp('/' + window.location.host + '/');
    if (!a.test(this.href)) {
        window.open(this.href);
        return false;
    }
});
4

4 回答 4

23

纯JS:

function externalLinks() {
  for(var c = document.getElementsByTagName("a"), a = 0;a < c.length;a++) {
    var b = c[a];
    b.getAttribute("href") && b.hostname !== location.hostname && (b.target = "_blank")
  }
}
;
externalLinks();
于 2012-10-30T20:39:24.550 回答
1

links属性返回文档中所有元素的集合,并<area>带有<a>href 属性的值。

   var links = document.links;
    for(var i = 0; i < links.length; i++) {
      if (links[i].hostname != window.location.hostname) {
        links[i].target = '_blank';
      } 
    }

https://developer.mozilla.org/en-US/docs/Web/API/Document/links

于 2021-01-25T23:43:19.870 回答
0

将 target="_blank" 添加到标签中。您可以在 onload 事件期间在预处理器(例如 PHP)或 JS 中执行此操作。

于 2012-10-20T11:41:01.727 回答
0
       $("a[href^=http]").each(function(){
          if(this.href.indexOf(location.hostname) == -1) {
             $(this).attr({
                target: "_blank",
                title: "Opens in a new window"
             });
          }
       })

这个脚本应该适合你。

更新:试试这个小提琴http://jsfiddle.net/sameerast/GuT2y/

JS版

    var externalLinks = function(){
      var anchors = document.getElementsByTagName('a');
      var length = anchors.length;
      for(var i=0; i<length;i++){
        var href = anchor[i].href;
        if(href.indexOf('http://sample.com/') || href.indexOf('http://www.sample.com/')){
          return;
        }
        else{
          anchor[i].target='_blank';
        }
      }
    };
于 2012-10-20T11:46:27.930 回答