Как в ссылке заменить атрибут href на другой и закодировать путь в Base64 используя делегирование событий?

Ссылка скопирована
23 марта 2026 1 ответ

Есть несколько ссылок типа

<a class="button" href="https://site.ru/deffr">Ссылка</a> <a class="button" href="https://site.ru/ccfrs">Ссылка</a> <a class="button" href="https://site.ru/vghtr">Ссылка</a>

<a class="button" href="https://site.ru/deffr">Ссылка</a> <a class="button" href="https://site.ru/ccfrs">Ссылка</a> <a class="button" href="https://site.ru/vghtr">Ссылка</a>

Имея класс

"button"

, как закодировать содержимое

HREF

в

Base64

и после кодировки заменить атрибут

href

на придуманный атрибут

link

Ссылки при этом должны иметь на выходе приблизительно вот такой вид

<a class="button" link="aHR0cHM6Ly9zaXRlLnJ1L2RzZnNzZw==">Ссылка</a>

<a class="button" link="aHR0cHM6Ly9zaXRlLnJ1L2RzZnNzZw==">Ссылка</a>

У меня есть скрипт

const o = document.querySelector(`.button`) let v = o.href o.removeAttribute('href') v = btoa(v) o.setAttribute('link', v) o.addEventListener('click', e => {   let v = e.target.getAttribute('link')   v = atob(v)   location.href = v });

const o = document.querySelector(`.button`) let v = o.href o.removeAttribute('href') v = btoa(v) o.setAttribute('link', v) o.addEventListener('click', e => { let v = e.target.getAttribute('link') v = atob(v) location.href = v });

Он справляется с задаче, но только к первой ссылке, а надо чтобы все ссылки класса

button

были зашифрованы и кликабельны, переходимы, то-бишь используя делегирование событий. Заранее спасибо большое!

Дополнительно:

document.querySelectorAll()
Array.prototype.forEach()

Но сама идея максимально странная: скриндеры не будут работать с такими ссылками, такие ссылки нельзя выделить с клавиатуры (и нажать соответственно), доп. атрибуты (rel, referrerpolicy, target) не работают.

  • Александр, вот здесь так реализованно (см. Скрин жёлтые ссылки 'найти'), в ссылке (убрать слэш)
    https_://uniticket._ru/country/crimea/

    Как в ссылке заменить атрибут href на другой и закодировать путь в Base64 используя делегирование событий?

    По ссылкам переходит

  • sochi-russia, По ссылкам переходит когда Вы мышкой нажимаете, а не когда клавиатурой пытаетесь это сделать. В данном случае - сайт-агрегатор, и такой подход они могут использовать в целях защиты от скрэпинга (париснга) сайта, что на стандартном сайте использовать явно не стоит.
  • Александр, у нас агрегатор авиабилетов так же, дело в том, что у нас поиск авиабилетов идёт на поддомене, то-бишь при клике ссылке переходишь на поддомен и там идёт поиск, сейчас у нас на ссылках стоит якорь, при клике на ссылку страница поднимается вверх к поисковой форме. Вся идея заключается в том, что так как если мы уберем якоря, и пропишем ссылку, то пользователя будет переводить на поддомен, то-бишь внешни ресурс, сразу начнется передоваться вес с главной на поддомен у пс, что в плане Seo не лучший вариант, поэтому мы хотим ссылку сделать не ссылкой и зашифровать, что в плане Seo недолжно негативно сказаться на сайте, вот наш сайт https://avia-avia.ru
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Антон С. Ответ

    Для замены атрибута href на другой и закодирования пути в Base64, можно воспользоваться делегированием событий. Для этого нужно добавить обработчик события на родительский элемент, который будет отслеживать клики на элементах, содержащих ссылки. Затем при клике на ссылку будет происходить замена атрибута href и кодирование пути в Base64.

    Пример решения задачи на языке PHP:

    ```php

    document.addEventListener('click', function(event) {
    if(event.target.tagName === 'A') {
    event.preventDefault(); // предотвращаем переход по ссылке

    // Получаем текущий путь ссылки
    let currentPath = event.target.getAttribute('href');

    // Заменяем атрибут href на другой
    event.target.setAttribute('href', 'новый_путь');

    // Кодируем путь в Base64
    let encodedPath = btoa(currentPath);

    console.log('Закодированный путь в Base64: ' + encodedPath);
    }
    });

    ```

    В данном примере при клике на любую ссылку на странице будет происходить замена атрибута href на другой и кодирование исходного пути в Base64. Замену атрибута и кодирование можно изменить в соответствии с требованиями проекта. Таким образом, делегирование событий позволяет эффективно обрабатывать события на динамически создаваемых элементах страницы.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно