2011-12-08 26 views
1

新的窗口我不知道我要把'???'讓它檢查網站是否是我的地址。這也適用於谷歌AdSense廣告(只是想知道,但不重要)?打開所有鏈接,而不是我的網站的一部分與jquery

我正在考慮使用像'不'這樣的邏輯運算符。所以它會檢查是否我的網站?那麼呢?會是我的網站?

$j(!a[href=???]).click(function(){ 
       window.open(this.href, "target=_blank"); 
       return false; 
      }); 
+1

你會意識到,這樣一來,你打破所有的鏈接,如果彈出窗口攔截器已啓用? 直接在HTML源代碼中執行此操作要好得多,其中'target =「_ blank」'不會觸發彈出窗口阻止程序即可工作。 –

+0

@Pekka所以我看到使用.click()與window.open會打破鏈接,但下面的方法使用.attr()並添加,你提到的HTML代碼不應該打破它,正確嗎? –

+1

下面加入'target =「_ blank」'的方法不應該打破它,你是對的。 –

回答

0

如何:

$j('a').live('click', function(){ 
    if(this.href.indexOf('yourwebsite.com') == -1) { 
    window.open(this.href, "target=_blank"); 
    return false; 
    } 
}); 

這也可以用正則表達式改進,使之不趕網址像http://someothersite.com/yourwebsite.com/,但它是一個邊緣的情況下。

5

試試這個:

$j('a') 
    .not('[name^="http://your.domain.com/"]') 
    .attr('target', '_blank'); 

更新

我以前的補丁只適用如果所有的URL都是絕對,這是一個壞的假設。試試這個:

$j('a[name^="http:"], a[name^="https:"]') 
    .not('[name^="http://your.domain.com/"]') 
    .attr('target', '_blank'); 

這個新版本會跳過所有的相對URL。如果您的所有網站內網址都是相對的(即不以https?:開頭),則可以跳過.not

+0

我嘗試了這個,它有點工作,因爲我的網站的頁面在新窗口中打開,這正是我試圖避免的。我不知道爲什麼它也不起作用。 –

+0

我試過了:不是vs。不是(),它仍然將我網頁上的每個鏈接都轉換爲target = _blank鏈接。 –

+0

@Nils R - 如果您仍然遇到問題,我會在網絡瀏覽器中加入一個演示版本,該版本在Web瀏覽器上的密集程度較低,並且靈活一點 –

1

您可以設置一個類來做到這一點:

// Outbound Links 
var outLinks = function() { $('a[@class*=out]').click(function(){ this.target = '_blank'; }); } 
$(document).ready(outLinks); 

然後,所有你需要做的就是添加了「出」類的任何鏈接,它會打開一個新窗口。

或爲其中以http開頭的鏈接://

$('a[href^="http://"]').prop("target", "_blank"); 
2

運行像$('a')東西是通過每一個A元素將循環 - 你只能擔心它的實際點擊。此外,你可以運行相關的網站作爲你的網站,絕對網址是別人的。

$(document).on('click', 'a', function(event){ 
    var $a = $(this); 
    // test for anything like `http://` or '//whatever' or 'ftp://' 
    if (/^\w+?\:?\/\//.test($a.attr('href'))){ 
    // since this runs before the event is propagated, 
    // adding it now will still work 
    $a.prop('target', '_blank'); 
    } 
}); 

演示:http://jsfiddle.net/danheberden/3bnk9/

或者你可以使用window.open:

$(document).on('click', 'a', function(event){ 
    var href = $(this).attr('href'); 
    // test for anything like `http://` or '//whatever' or 'ftp://' 
    if (/^\w+?\:?\/\//.test(href)){ 
    // dont follow the link here 
    event.preventDefault(); 

    // open the page 
    window.open(href, '_blank'); 
    } 
}); 

演示:http://jsfiddle.net/danheberden/NcKdh/

+0

這實際上似乎是一個偉大的方法,我可以看到與此唯一的問題是,如果某人由於某種原因已關閉JS,那麼我的所有鏈接都被破壞,因爲我必須遵循一個新的鏈接模式錨鏈接爲此工作。 –

+0

咦?如果JS被禁用了,那麼這個方法就會崩潰,這就是爲什麼你應該在你的HTML中添加'target =「blank」'而不是你的問題的方式:) –

+0

謝謝,但是我添加這個JS的原因是因爲有一個特定的頁面,我需要所有的網址去一個新的窗口(每個請求),幾乎整個頁面都是動態的,但是我可以使用target =「_ blank」。 –

相關問題