Как в ссылке заменить атрибут href на другой и закодировать путь в Base64 используя делегирование событий?
Есть несколько ссылок типа
<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, можно воспользоваться делегированием событий. Для этого нужно добавить обработчик события на родительский элемент, который будет отслеживать клики на элементах, содержащих ссылки. Затем при клике на ссылку будет происходить замена атрибута 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. Замену атрибута и кодирование можно изменить в соответствии с требованиями проекта. Таким образом, делегирование событий позволяет эффективно обрабатывать события на динамически создаваемых элементах страницы.