nmeri17 Ответов: 1

Замените один HTML-тег другим


Всякий раз, когда создается сообщение ajax, возвращается полная страница с HTML 4 doctype, но я хочу отобразить эту страницу на текущей. Есть также некоторые сценарии в теге head этой возвращаемой страницы, которые завернуты в document. ready, что означает, что мои возможности ограничены $.parseHTML то есть они должны выполняться всякий раз, когда новый документ полностью загружен. Ниже приведен текущий код, который я использую

Что я уже пробовал:

$.post('tet.php', {key: JSON.stringify(payload)}, function(res) {

// res truly returns a full page
 var newPage = $.parseHTML($.trim(res), null, true).find(function (e) {
 try {
  return e.matches('#container'); // this is the one tag I'm interested in
 }
 catch (e) {
  return false;
 }
 });

 $('body').replaceWith(newPage); // errors originate from this line
});


Теперь приведенный выше код продолжает выбрасывать всевозможные ошибки, вращающиеся вокруг отсутствия documentFragment или отсутствует clientWidth и т.д. Как мне выбрать этот элемент и загрузить его в DOM, все еще имея возможность выполнить скрипт в его теге head? Если это невозможно, то как я могу удалить текущий документ и установить возвращенный?

1 Ответов

Рейтинг:
1

W∴ Balboos, GHB

"Всякий раз, когда создается сообщение ajax, возвращается полная страница с HTML 4 doctype, но я хочу отобразить эту страницу на текущей."

Если вы хотите отобразить одну HTML-страницу внутри другой, я предлагаю вам использовать элемент "iframe". HTML тег iframe[^]

"Демпинг" одной HTML-страницы внутри другой неизбежно вызовет проблемы, поскольку неправильно размещенные теги изобилуют (два тела, два заголовка, два HTML - объявления и еще один DOCTYPE)-все это неуместно.


nmeri17

Я знаю. Вот почему я пытаюсь отсеять другие узлы в ответе, сохраняя сценарии и выполняя их, как только нужный элемент будет загружен в документ. Если это не сработает, моя другая альтернатива-заменить текущий HTML (и запущенный скрипт) на ответный HTML, чтобы взять вещи оттуда.

W∴ Balboos, GHB

Тогда почему бы не использовать форму-она заменит вашу текущую страницу целевой?

nmeri17

Вы имеете в виду возврат формы в ответе вместо полной страницы? Если бы у меня был контроль над тем, что было возвращено, я бы даже просто вернул объект или JSON или что-то более простое в обращении. Но это полная возвращенная страница, и содержимое страницы, которое мне нужно изменить после того, как ответы будут загружены, то есть после того, как документ будет готов

W∴ Balboos, GHB

Нет-вместо AJAX поместите данные вашей страницы в "форму". Обработайте его на сервере, чтобы создать новую страницу, а затем он заменит текущую страницу.

Кнопка отправки вашей формы запускается на страницу, предназначенную для "действия"

nmeri17

Хорошо. Дай мне секунду, посмотрим, что из этого выйдет.

nmeri17

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

nmeri17

Это привело к бесконечному циклу: форма отправлена, и мы переходим на новую страницу, новая страница, кажется, имеет то же содержание, что и текущая, перезагружается и переносит нас на новую страницу, новая страница имеет то же содержание, и так далее. Новый код здесь https://pastebin.com/UbGRdivY

W∴ Balboos, GHB

Иди сюда https://www.w3schools.com/html/html_forms.asp и посмотрите, как использовать формы.