@IliaMal

Как добавить в dom элементы с выполнением скриптов?

Здравствуйте.

Сейчас на сайте используется JQuery, потихоньку отказываюсь от него, но возникли сложности с обработкой конетна получаемого через ajax.

Сейчас c использованием $.post() все просто, достаточно в подгружаемом html добавить нужные скрипты в <script> ... </script> и все будет работать.
На нативном js, через fetch() такая конструкция не работает.
Ситуационно я выхожу из положения через:
  • .target
  • вынос скриптов в отдельный объект и выполнение в new Function() или eval()
  • обращение к функциям через onclick и прочим

Но это все костыли. Если на странице много используется аякса нужно что то универсальное.

Подскажите, есть ли готовой универсальный механизмы работы с контентом из ajax? Может библиотеки какие?
На бэкенде остается php, по этому js фреймворки типа React, vue и тд не подходят.

P.S. Нагуглить пытался, не нагуглилось.
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
IvanU7n
@IvanU7n
nothing interesting here
при динамическом добавлении разметки со script, его содержимое не выполняется, универсальным способом будет пройтись по добавленному куску разметки, найти все такие элементы и потом пересоздать их заменив новыми оригиналы:
element.innerHTML = /* разметка */
for (const sourceElement of element.querySelectorAll('script')) {
    const resultElement = document.createElement('script');
    resultElement.textContent = sourceElement.textContent;
    for (const attribute of sourceElement.getAttributeNames()) {
        resultElement.setAttribute(attribute, sourceElement.getAttribute(attribute));
    }
    sourceElement.replaceWith(resultElement);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
JQuery состоит из частей, собственно если нужен только ajax, можно взять https://github.com/jquery/jquery/blob/main/src/ajax.js , но я бы все-таки посоветовал освоить fetch
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект