Проверить, являются ли ссылки внешними с помощью jQuery / javascript? - PullRequest
59 голосов
/ 26 мая 2010

Как мне проверить, являются ли ссылки внешними или внутренними? Пожалуйста, обратите внимание:

  1. Я не могу жестко кодировать локальный домен.
  2. Я не могу проверить «http». Я мог бы так же легко ссылаться на свой собственный сайт с абсолютной ссылкой http.
  3. Я хочу использовать jQuery / javascript, а не css.

Я подозреваю, что ответ лежит где-то в location.href, но решение уклоняется от меня.

Спасибо!

Ответы [ 12 ]

0 голосов
/ 23 марта 2016

Для тех, кто заинтересован, я сделал троичную версию блока if с проверкой, чтобы увидеть, какие классы есть у элемента и какой класс присоединяется.

$(document).ready(function () {
    $("a").click(function (e) {

        var hostname = new RegExp(location.host);
        var url = $(this).attr("href");

        hostname.test(url) ?
        $(this).addClass('local') :
        url.slice(0, 1) == "/" && url.slice(-1) == "/" ?
        $(this).addClass('localpage') :
        url.slice(0, 1) == "#" ?
        $(this).addClass('anchor') :
        $(this).addClass('external');

        var classes = $(this).attr("class");

        console.log("Link classes: " + classes);

        $(this).hasClass("external") ? googleAnalytics(url) :
        $(this).hasClass("anchor") ? console.log("Handle anchor") : console.log("Handle local");

    });
});

Бит Google Analytics можно игнорировать, но именно здесь вы, вероятно, хотели бы что-то сделать с URL-адресом, теперь, когда вы знаете, какой это тип ссылки. Просто добавьте код внутри троичного блока. Если вы хотите проверить только один тип ссылки, замените троичные на оператор if.

Отредактировано, чтобы добавить в проблему, с которой я столкнулся. Некоторые из моих ссылок были "/ Курсы /" вроде так. Я сделал проверку для локальной страницы, которая проверяет, есть ли косая черта в начале и конце href. Хотя, возможно, достаточно просто проверить «/» в начале.

0 голосов
/ 26 мая 2010

Да, я полагаю, вы можете получить текущее доменное имя с помощью location.href. Другая возможность - создать элемент ссылки, установить src в / и затем получить канонический URL-адрес (при этом вы получите базовый URL-адрес, если вы его используете, а не обязательно имя домена).

Также смотрите этот пост: Получите полный URI из свойства href ссылки

...