Задать вопрос
HelpSophie
@HelpSophie

Как узнать, что ссылка ведет на картинку на своем домене?

Задача подключить fancybox ко всем картинкам на сайте.

Для этого нужно
1. найти картинки у которых обертка не ссылка, и обернуть в ссылку.
тут нет проблем

2. если картинка уже обернута в ссылку, то нужно определить, что это ссылка на картинку, причем на картинку на своем домене. И тогда добавить только data-
$('.content-block img').each(function () {
    var $parent = $(this).parent();
//если родитель ссылка и это ссылка на картинку, то добавляем только data-
    if ($parent[0].tagName == "A" && $parent.attr("href").indexOf(".jpg") + 1 > 0) {
      $parent.attr('data-fancybox', 'gallery');
    }
}

Для jpg ОК.
Но картинки могут быть jpg, png, gif, webp.
Не писать же 4 условия?
Так
$parent.attr("href").indexOf(".jpg|.gif|.png|.webp") + 1 > 0
не работает
И как определить, что это не внешняя ссылка?
  • Вопрос задан
  • 227 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Не писать же 4 условия?

Можно использовать регулярное выражение:
if ($parent[0].tagName == 'A' && (/\.(gif|jpg|webp|png)$/i).test($parent.attr('href'))) {
  // do something
}


И как определить, что это не внешняя ссылка?

function getDomain(url) {
  return url.replace('http://','').replace('https://','').split('/')[0];
}

function isExternal(url) {
  return getDomain(location.href) !== getDomain(url);
}

if (isExternal($parent.attr('href')) {
  // do something
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@DanKud
if ($parent[0].tagName == "A" && $parent.attr("href").match(/(\.jpg|\.png|\.gif|\.webp)/)) {
Ответ написан
Комментировать
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
Чтобы узнать внешняя или нет ссылка, нужно сравнить свой hostname с hostname или host ссылки. Гляньте в DOM ссылки, там есть такое свойство, причём совершенно актуально, даже если ссылка относительная. Я имею ввиду DOM HTMLAnchorElement'а.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы