Помощ за външна връзка на Jquery

Аз съм сравнително нов в 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" към крайния резултат. Това лоша практика ли е или приемливо?

Благодаря за всякакви съвети.


person geckomist    schedule 04.03.2010    source източник
comment
Да, това е добре. Очаква се страниците да преминат проверка преди стартирането на JavaScript, а не след.   -  person Tobias Cohen    schedule 05.03.2010
comment
Бих казал, че все още е добра практика страницата ви да се валидира след стартиране на JavaScript. Тук можете да използвате click(), който изпълнява window.open($(this).attr('href'), '_blank'). Той все още използва името _blank, но не добавя атрибута към вашия HTML.   -  person alex    schedule 05.03.2010


Отговори (1)


Вместо да проверявате за равенство на името на хоста, можете да проверите дали 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 и така тяхната цел ще бъде зададена.

person Lobstrosity    schedule 05.03.2010