chigolberi
@chigolberi

Скрипт перестаёт работать если есть якорь в контенте, как исправить?

Всем привет!

Есть скрипт, обрабатывает все ссылки внутри тега с классом link-add
const links = document.querySelectorAll('.link-add a');
const url = 'http://test.ru/dwxl/?url='

Array.from(links)
    .filter(link => link.getAttribute('href').startsWith('http'))
    .forEach(link => link.href = url + link.href);

Но если в контенте я использую якорь такого типа
<a id="ram1"></a>
Скрипт перестаёт работать.

Подскажите пожалуйста, что нужно дописать в скрипт, чтобы исправить данную ситуацию ?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Raxen
@Raxen
Lead Frontend Developer, Beeline
Когда в массив попадает ссылка-якорь, у которой нет атрибута href, ваш код падает на этом месте
link.getAttribute('href').startsWith('http')
Потому что не может сделать метод startsWith у нуля, т.к. атрибут href у такой ссылку null.
Что бы избежать подобной ситуации проверяйте есть ли у ваших ссылок такой атрибут

так
const links = document.querySelectorAll('.link-add a[href]');
const url = 'http://test.ru/dwxl/?url='

Array.from(links)
    .filter(link => link.getAttribute('href').startsWith('http'))
    .forEach(link => link.href = url + link.href);


или так
const links = document.querySelectorAll('.link-add a');
const url = 'http://test.ru/dwxl/?url='

Array.from(links)
    .filter(link => link.getAttribute('href') && link.getAttribute('href').startsWith('http'))
    .forEach(link => link.href = url + link.href);


А по хорошему, как уже писали в комментариях - не используйте ссылки без атрибута href, но я так понимаю это специфика плагина
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы