2012-10-20 18 views
8

Jaki jest najlepszy sposób otwierania wszystkich linków zewnętrznych (adresów URL, które nie pasują do bieżącej domeny) w nowej karcie przy użyciu JavaScript, bez korzystania z jQuery?Otwórz linki zewnętrzne w nowej karcie bez jQuery

Oto jQuery jestem obecny przy użyciu:

// 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; 
    } 
}); 

Odpowiedz

16

Czyste 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

Doskonale, dziękuję! – AlecRust

0

Dodaj target = "_ blank" do znacznika. Możesz to zrobić w preprocesorze (na przykład PHP) lub w JS podczas zdarzenia onload.

+0

sklarowane pytanie. – AlecRust

+0

Szukasz sposobu na wykonanie powyższych czynności w JavaScript, ale bez korzystania z jQuery? Jeśli tak, czy masz inną bibliotekę, czy też musi to być zwykły JS? –

+0

Zwykły JS, jeśli to możliwe. – AlecRust

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

Ten skrypt powinien działać dla Ciebie.

UPDATE: spróbuj tego skrzypce http://jsfiddle.net/sameerast/GuT2y/

JS wersja

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

Czy to nie używa funkcji jQuery [.each()] (http://api.jquery.com/jQuery.each/)? – AlecRust

+0

Użyto i dodałem target = "_ blank", a następnie kliknęło to użytkownika na link jako nowa zakładka/okno –

+0

Jak mówię, czy twoje rozwiązanie nie korzysta z funkcji .each() jQuery? Moje pytanie nie określało użycia jQuery. – AlecRust

Powiązane problemy