Как заменить весь узел HTML с помощью jQuery - PullRequest
56 голосов
/ 06 августа 2009

У меня есть строка, которая выглядит следующим образом:

<html><head><title>example</title></head><body>some example text</body></html>

Я получаю эту строку, возвращенную в результате запроса AJAX.

Я бы хотел, чтобы браузер отображал и отображал эту строку. Идея была бы сделать что-то вроде:

$('html').parent().html(myString);

Ну, это не работает. Я пытался использовать IFRAME, но я так и не понял, как заставить это работать.

Примечание: Я не могу изменить эту строку. Также невозможно перегенерировать эту строку при последующем обращении к серверу (иначе я мог бы просто перенаправить браузер на этот URL).

Ответы [ 5 ]

120 голосов
/ 06 августа 2009

Методы document.open/write/close будут делать то, что вы хотите:

var newDoc = document.open("text/html", "replace");
newDoc.write(myString);
newDoc.close();

Если вы не передадите параметр replace, вызов document.open добавит историю страниц. Таким образом, пользователям придется дважды щелкнуть назад, чтобы перейти на предыдущую страницу.

14 голосов
/ 06 августа 2009

Вы можете просто удалить теги html, а затем поместить все в элемент html:

$('html').html(myString.replace(/<html>(.*)<\/html>/, "$1"));
6 голосов
/ 01 июля 2016

По крайней мере, в 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 () в документе, который имел его история возвращается в прежнее состояние).

3 голосов
/ 16 декабря 2010

Можно попробовать еще один вариант:

$('html').replaceWith(myString);

http://api.jquery.com/replaceWith/

1 голос
/ 31 декабря 2018
document.documentElement.innerHTML = myString;

Работает, кроме IE9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...