新的窗口我不知道我要把'???'讓它檢查網站是否是我的地址。這也適用於谷歌AdSense廣告(只是想知道,但不重要)?打開所有鏈接,而不是我的網站的一部分與jquery
我正在考慮使用像'不'這樣的邏輯運算符。所以它會檢查是否我的網站?那麼呢?會是我的網站?
$j(!a[href=???]).click(function(){
window.open(this.href, "target=_blank");
return false;
});
新的窗口我不知道我要把'???'讓它檢查網站是否是我的地址。這也適用於谷歌AdSense廣告(只是想知道,但不重要)?打開所有鏈接,而不是我的網站的一部分與jquery
我正在考慮使用像'不'這樣的邏輯運算符。所以它會檢查是否我的網站?那麼呢?會是我的網站?
$j(!a[href=???]).click(function(){
window.open(this.href, "target=_blank");
return false;
});
如何:
$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/,但它是一個邊緣的情況下。
試試這個:
$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
。
我嘗試了這個,它有點工作,因爲我的網站的頁面在新窗口中打開,這正是我試圖避免的。我不知道爲什麼它也不起作用。 –
我試過了:不是vs。不是(),它仍然將我網頁上的每個鏈接都轉換爲target = _blank鏈接。 –
@Nils R - 如果您仍然遇到問題,我會在網絡瀏覽器中加入一個演示版本,該版本在Web瀏覽器上的密集程度較低,並且靈活一點 –
您可以設置一個類來做到這一點:
// Outbound Links
var outLinks = function() { $('a[@class*=out]').click(function(){ this.target = '_blank'; }); }
$(document).ready(outLinks);
然後,所有你需要做的就是添加了「出」類的任何鏈接,它會打開一個新窗口。
或爲其中以http開頭的鏈接://
$('a[href^="http://"]').prop("target", "_blank");
運行像$('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');
}
});
這實際上似乎是一個偉大的方法,我可以看到與此唯一的問題是,如果某人由於某種原因已關閉JS,那麼我的所有鏈接都被破壞,因爲我必須遵循一個新的鏈接模式錨鏈接爲此工作。 –
咦?如果JS被禁用了,那麼這個方法就會崩潰,這就是爲什麼你應該在你的HTML中添加'target =「blank」'而不是你的問題的方式:) –
謝謝,但是我添加這個JS的原因是因爲有一個特定的頁面,我需要所有的網址去一個新的窗口(每個請求),幾乎整個頁面都是動態的,但是我可以使用target =「_ blank」。 –
你會意識到,這樣一來,你打破所有的鏈接,如果彈出窗口攔截器已啓用? 直接在HTML源代碼中執行此操作要好得多,其中'target =「_ blank」'不會觸發彈出窗口阻止程序即可工作。 –
@Pekka所以我看到使用.click()與window.open會打破鏈接,但下面的方法使用.attr()並添加,你提到的HTML代碼不應該打破它,正確嗎? –
下面加入'target =「_ blank」'的方法不應該打破它,你是對的。 –