2010-03-04 2 views
1

Я довольно новичок в jquery и не имел много времени, чтобы исследовать больше, и мне было интересно, может ли кто-нибудь помочь мне. Вот код, у меня есть, который я вытащил из разных мест:JQuery External Link Help

$("a").filter(function() { 
         return this.hostname && this.hostname !== location.hostname; 
         }) 
         .attr({ 
           target: "_blank" 
           }); 
         $('a[rel*="external"]').live('click',function(){ this.target='_blank'; }); 

То, что я это делаю, когда есть Ярлык с HREF = «HTTP: //», то он добавляет целевой = «_blank» в Это. Если href = "http: //" следует с URL-адресом веб-сайта, то вы не добавите target = "_ blank". Кроме того, если я хочу, чтобы внутренняя страница открывалась в новом окне, я бы добавил rel = "external" к тегу A, который затем преобразуется в target = "_ blank" на реальном сайте.

Как я могу сделать так, чтобы, если у меня есть поддомен, он также не будет открыт как внешняя страница. Скажем, мой url example.com, а субдомен - test.example.com. Поэтому, если я сделаю ссылку с example.com на test.example.com, то я не хочу, чтобы она открывалась в новом окне. Также от test.example.com к example.com я бы не хотел, чтобы он открывался в новом окне.

Также это хороший подход? Я пишу свои сайты в xhtml 1.1 и стараюсь, чтобы страницы были действительны. Это будет проходить проверку, но она добавляет target = "_ blank" в конечный результат. Является ли эта плохая практика или приемлемой?

Спасибо за любой совет.

+0

Да, это нормально. Ожидается, что страницы пройдут проверку * до того, как будет запущен JavaScript, а не * после *. –

+0

Я бы сказал, что по-прежнему хорошая практика для проверки вашей страницы после запуска JavaScript. Вы можете использовать 'click()' здесь, который запускает 'window.open ($ (this) .attr ('href'), '_blank')'. Он по-прежнему использует имя '_blank', но он не добавляет атрибут в ваш HTML. – alex

ответ

0

Вместо проверки правильности имени хоста вы можете проверить, заканчивается ли this.hostname с помощью location.hostname. К сожалению, JavaScript не имеет функцию EndsWith, но вы можете легко написать одно:

String.prototype.endsWith = function(that) { 
    return this.lastIndexOf(that) == this.length - that.length; 
}; 

Затем в вашем filter метод:

return this.hostname && this.hostname.endsWith(location.hostname); 

Ссылки на subdomain.example.com конец с example.com и поэтому их цель была бы задавать.