2012-10-20 59 views
8

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

这里是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; 
    } 
}); 

回答

16

纯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(); 
+0

完美,谢谢! – AlecRust

0

添加目标= “_空白” 的标签。您可以在预处理器(例如PHP)或onload事件中的JS中执行此操作。

+0

澄清问题。 – AlecRust

+0

您是否正在寻找一种方法在JavaScript中执行上述操作,但未使用jQuery?如果是这样,你有任何其他库,还是它必须是普通的JS? –

+0

平原JS如果可能的话。 – AlecRust

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

此脚本应该适合您。

UPDATE:试试这个小提琴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'; 
     } 
     } 
    }; 
+0

这不是使用jQuery的[.each()](http://api.jquery.com/jQuery.each/)函数吗? – AlecRust

+0

它使用并添加目标=“_ blank”,然后用户点击它作为新的标签页/窗口去链接 –

+0

就像我说的,你的解决方案不使用jQuery的.each()函数?我的问题指定不使用jQuery。 – AlecRust

相关问题