Догрузка script и link которых нет в DOM после получения AJAX-ответа?

Есть некий скрипт, который загружает html-содержимое через ajax-запрос в определенный контейнер.

В пришедшем содержимом могут быть элементы script и link, так же некоторые из этих элементов уже могут быть в DOM, в таком случае повторно их подключать не надо.



Пока что на ум приходит только парсить ответ, и сравнивать по src с тем, что уже есть в текущем документе.



Но как быть с инлайновыми скриптами и стилями? Неужто сравнивать их как текст по innerHTML?



Наверняка ведь существует красивое и изящное решение. Подскажите, пожалуйста.
  • Вопрос задан
  • 4208 просмотров
Пригласить эксперта
Ответы на вопрос 6
@minister35
Можно завести два массива (или объекта), который будет содержать в себе уже загруженные стили и скрипты, а инциализировать их так: в каждом скрипте, будь то инлайновый или в отдельном файле, инициализировать соотвествующее поле объекта и выполянть скрипт(или всатвлять или подключать стили), если оно не инициализировано, или ничего не делать в противном случае. Таким образом, мне кажется, проблему решить можно.
Ответ написан
Комментировать
@Apx
Java/JavaEE/Javascript developer
Возьмите уже готовое решение. Намного проще и быстрее, такое оно воде тоже умеет.
max.jsrhost.com/ajaxify/demo.php
Ответ написан
MTonly
@MTonly
Веб-разработчик с 2002 года
Вместо inline-скриптов и стилей можно возвращать их в отдельных JSON-полях Ajax-ответа:
{
	"html" : "<h1>Hello, world</h1>",
	"js"   : "alert('Good bye, world')",
	"css"  : "#example {background: #ccc; }"
}
Ответ написан
azproduction
@azproduction
Это, конечно, извращение, но сделать в пару строк можно — jsfiddle.net/Cx5Wa/2/
Для живого примера прогоните код в консоли над хабром — продатет реклама.
Ответ написан
Комментировать
@tnz
Присвоить скриптам и стилям айдишники, парсить ответ, выдирать идшники, сравнивать с теми, что уже есть на странице.
Ответ написан
Комментировать
@frees2
Поставьте кнопку которую надо (или не надо) нажимать для загрузки этой же странички где она расположена внутрь контейнера а не снаружи
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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