Как создать ссылку с изображением с помощью JavaScript?

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

```html
<script type="text/javascript">
function changeImageAndRedirect(imgSrc, link) {
    document.example_img.src = imgSrc;
    document.example_img.parentNode.href = link;
}
</script>

<table style="width: 100%;">
<tr style="text-align: center; vertical-align: center;">
 <td style="width: 50%;">
  <a href="javascript:changeImageAndRedirect('image/img_1.png', 'https://example.com/page1')">Ссылка на изображение № 1</a><br>
  <a href="javascript:changeImageAndRedirect('image/img_2.png', 'https://example.com/page2')">Ссылка на изображение № 2</a><br>
  <a href="javascript:changeImageAndRedirect('image/img_3.png', 'https://example.com/page3')">Ссылка на изображение № 3</a><br>
  <a href="javascript:changeImageAndRedirect('image/img_4.png', 'https://example.com/page4')">Ссылка на изображение № 4</a><br>
 </td>
 <td style="width: 50%;">
  <a href="https://example.com/page1"><img src="image/img_1.png" name="example_img" alt="Картинки для демонстрации работы скрипта смены изображений"></a>
 </td>
</tr>
</table>
```
  • 18 января 2024 г. 10:20
Ответы на вопрос 2
Ваш HTML и JavaScript уже почти настроены для создания интерактивной галереи, где каждый клик на текстовой ссылке меняет изображение и его связанный URL. Но есть пара моментов, которые следует учесть при работе с вашим текущим кодом:

1. Вместо использования `javascript:` в атрибуте href, которое является устаревшей практикой, лучше использовать обработчики событий в JavaScript.
2. Необходимо, чтобы элемент `img` был обёрнут в элемент `a`, чтобы пользователь мог кликнуть по картинке и перейти по ссылке.

Вам необходимо обновить ваш JavaScript, чтобы он назначал обработчики событий на ссылки, а не использовал встраивание кода в атрибут href. Вам также надо убедиться, что `img` находится внутри `a`, чтобы создать кликабельную картинку. Судя по вашему коду, `img` уже внутри `a`, так что осталось только настроить JavaScript.

Пример обновлённого кода:

```html
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
    var links = document.querySelectorAll('td > a'); // Получить все анкеры внутри ячеек таблицы
    for (var i = 0; i < links.length; i++) {
        links[i].addEventListener('click', function(e) {
            e.preventDefault(); // Отменить стандартное поведение перехода по ссылке
            var imgSrc = this.getAttribute('data-img');
            var link = this.getAttribute('data-link');
            var img = document.querySelector('img[name="example_img"]');
            var imgLink = img.parentNode;
            img.src = imgSrc;
            imgLink.href = link;
        });
    }
});
</script>

<table style="width: 100%;">
  <tr style="text-align: center; vertical-align: center;">
    <td style="width: 50%;">
      <a href="#" data-img="image/img_1.png" data-link="https://example.com/page1">Ссылка на изображение № 1</a><br>
      <a href="#" data-img="image/img_2.png" data-link="https://example.com/page2">Ссылка на изображение № 2</a><br>
      <a href="#" data-img="image/img_3.png" data-link="https://example.com/page3">Ссылка на изображение № 3</a><br>
      <a href="#" data-img="image/img_4.png" data-link="https://example.com/page4">Ссылка на изображение № 4</a><br>
    </td>
    <td style="width: 50%;">
      <a href="https://example.com/page1"><img src="image/img_1.png" name="example_img" alt="Картинки для демонстрации работы скрипта смены изображений"></a>
    </td>
  </tr>
</table>
```

В этом коде:

- Все ссылки изменены так, чтобы в атрибуте `href` был просто `#`, которому добавляются два атрибута `data-img` и `data-link`, хранящие данные о пути к изображению и ссылке соответственно.
- JavaScript ожидает загрузки всего DOM, а затем назначает обработчики событий всем найденным ссылкам.
- В обработчике события извлекаются данные путей и ссылок из атрибутов `data-*`, после чего выполняется изменение `src` для картинки и `href` для родительской ссылки (parent `a` element).
- Функция `e.preventDefault()` используется для предотвращения стандартного поведения ссылки, так что клик по ней не перезагружает страницу.

Но я бы так написал:
Похожие вопросы