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

Изменение таблицы в DOM?


Есть таблиц, которая генерируется из файла .txt

<table class="table_top">
    <thead>...</thead>
    <tbody>
        <tr>
            <td>...</td>
            <td>текст который нужно изменить на ссылку с этим текстом</td>
            ...
        </tr>
...

Это код для вывода данных из файла .txt

const INPUT = document.addEventListener('DOMContentLoaded', function(event) {
  fetch('/message.txt')
    .then(function(response) {
      if (response.ok) {
        return response.text();
      }
      throw new Error('Не удалось загрузить файл.');
    }).then(function(text) {
      renderTable(text);
    })
    .catch(function(error) {
      console.error('Произошла ошибка при попытке отобразить файл: ' + error.message);
    });
});

И код который изменяет текст в таблице на ссылку с этим же текстом, но код не работает, так как таблицы по факту на странице нет.

(function() {    
    // сбор переменных
    // вы можете изменить это, чтобы изменить, какой элемент вы заменяете
    var reference = document.querySelector('.table_top td:nth-child(2)');
    var text = reference.innerText;
    var replacement = text.replace(reference, "www.site.com/q?=" + reference);
    // создать новый тег привязки
    var a = document.createElement('a');
    a.href = replacement;
    a.innerText = text;
    // произведите замену
    reference.innerHTML = ''; // очистите старое содержимое ссылки
    reference.appendChild(a); // добавьте новый тег привязки к элементу
});

Помогите настроить
  • Вопрос задан
  • 135 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
renderTable(text);
Если это промис, то его нужно продолжить then-ом и выполнить вашу функцию.
Если нет - обычная функция, то выполнить следом за ней.
А так, нужно смотреть, есть ли в рендере асинхронные методы, чтобы понять, когда отслеживать готовность таблицы для замены ссылок.
Дополнено:
Нужно передать управление браузеру на один миг с помощью setTimeout, чтобы пересчитать DOM. Тогда ваша функция обнаружит вставленный контент.
renderTable(text);
setTimeout(ваша_функция, 0);
Ответ написан
Ваш ответ на вопрос

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

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