Как заменить весь HTML node на jQuery
У меня есть строка, которая выглядит так:
<html><head><title>example</title></head><body>some example text</body></html>
Я возвращаю эту строку в результате запроса AJAX.
Я бы хотел, чтобы браузер отображал и отображал эту строку. Идея заключалась бы в том, чтобы сделать что-то вроде:
$('html').parent().html(myString);
Ну, это не работает. Я попытался использовать IFRAME, но я не понял, как заставить это работать.
Примечание: Невозможно изменить эту строку. Для меня также невозможно восстановить эту строку при последующем вызове на сервер (иначе я мог бы просто перенаправить браузер на этот URL-адрес).
Ответы
Ответ 1
Методы document.open/write/close будут делать то, что вы хотите:
var newDoc = document.open("text/html", "replace");
newDoc.write(myString);
newDoc.close();
Если вы не передадите параметр replace, вызов document.open добавляет историю страниц. Таким образом, пользователям придется дважды щелкнуть дважды, чтобы перейти на предыдущую страницу.
Ответ 2
Вы можете просто удалить теги html, а затем поместить все внутри элемента html:
$('html').html(myString.replace(/<html>(.*)<\/html>/, "$1"));
Ответ 3
По крайней мере, в firefox (47.0) решение:
var newDoc = document.open("text/html", "replace");
newDoc.write(response);
newDoc.close();
не работает так, как было предложено, так как нажатие кнопки "Назад" на Firefox все еще загружает предыдущую запись истории, т.е. вся точка использования "заменить" заключается в том, чтобы не нажимать на кнопку "Назад" только для того, чтобы приветствовать вид страницы до последнего раза вызывается document.write(). Способ сделать это, который не вызывает вышеупомянутый эффект, - это просто вызвать методы непосредственно в объекте документа:
document.open("text/html", "replace");
document.write(response);
document.close();
Использование опции замены не только позволяет заполнять историю пользователей мусором, но также помогает справляться с проблемами, возникающими из-за странных способов, которыми браузеры часто обрабатывают записи истории, созданные javascript, так как иногда позволяет браузеру регистрироваться изменения, внесенные в документ с помощью javascript в истории, могут иметь неожиданные результаты при обработке операций "назад/вперед" (например, добавление "wyciwyg://(somenumber)" к URL-адресу после выполнения document.write() в документе, который его история вернулась к предыдущему состоянию).
Ответ 4
Другим вариантом попробовать может быть
$('html').replaceWith(myString);
http://api.jquery.com/replaceWith/