Открыть все ссылки, не являющиеся частью моего сайта, в новом окне с помощью jquery - PullRequest
1 голос
/ 09 декабря 2011

Я не уверен, что я должен поставить в '???' чтобы он проверил, является ли сайт моим адресом или нет. Будет ли это также работать для рекламы Google AdSense (просто интересно, но не важно)?

Я думал об использовании логического оператора типа «не». Так он будет проверять, если не мой сайт? Так тогда ??? будет мой сайт?

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

Ответы [ 4 ]

5 голосов
/ 09 декабря 2011

Попробуйте это:

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

3 голосов
/ 09 декабря 2011

Выполнение чего-либо вроде $( 'a' ) будет проходить по циклу через КАЖДЫЙ 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/

1 голос
/ 09 декабря 2011

Вы можете настроить класс для этого:

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

Тогда все, что вам нужно сделать, это добавить класс "out" к любой ссылке, и он откроет новое окно.

Или для любой ссылки, которая начинается с http://

$('a[href^="http://"]').prop("target", "_blank");
0 голосов
/ 09 декабря 2011

Как насчет:

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

Это также можно улучшить с помощью регулярного выражения, чтобы оно не перехватывало URL-адреса, такие как http://someothersite.com/yourwebsite.com/,, но это крайний случай.

...