Справка по внешней ссылке Jquery - PullRequest
1 голос
/ 04 марта 2010

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

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

Я делаю это всякий раз, когда есть тег A с href = "http://", тогда он добавляет target =" _ 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" к конечному результату. Это плохая практика или приемлемо?

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

1 Ответ

0 голосов
/ 05 марта 2010

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

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, поэтому их цель будет установлена.

...