2011-12-08 9 views
1

私は '???'ウェブサイトが私の住所かどうかをチェックする。これはまた、Google Adsenseの広告(ちょうど不思議ですが、重要ではない)のために働くでしょうか?jqueryで新しいウィンドウで私のウェブサイトの一部ではないすべてのリンクを開く

私は 'not'のような論理演算子を使用することを考えていました。それで私のウェブサイトではないかどうかをチェックします。だから???私のウェブサイトですか?

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

あなたはこの方法は、あなたがポップアップブロッカー場合は、すべてのリンクを破ることを実現有効になっています? HTMLソースでこれを直接行うほうがずっと優れています。この場合、 'target =" _ blank "はポップアップブロッカーを起動せずに動作します。 –

+0

@Pekkaだから、window.openを使って.click()を使うと、リンクが壊れてしまうのですが、その下にある.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/ようなURLをキャッチしないように、また、これは正規表現を改善することができたが、それは極端なケースです。

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がスキップされます。サイト内のすべてのURLが相対的な場合(つまり、https?:で開始しない場合)、.notへの呼び出しをスキップできます。

+0

私はこれを試してみました。私のウェブサイトのページが新しいウィンドウで開き始めているので、これはややうまくいきました。これは私が避けようとしていたものです。私はそれがどちらもうまくいかない理由を知らない。 –

+0

私はそれを試しました:not vs。not()とそれはまだ私のページのすべてのリンクを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')のような何かを実行する//

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

はEVERY A要素をループするために起こっている - あなただけの、実際のクリックでそれを心配することができます。また、あなたはあなたのサイトである相対URLで実行することができ、絶対URLは他人のものです。

$(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

ありがとう、 1つの特定のページがあるので、私はすべてのURLを新しいウィンドウ(要求ごと)に移動する必要があり、ほぼすべてのページは動的ですが、あとは可能なときにtarget = "_ blank"を使用します。 –

関連する問題