Как заменить весь HTML-узел с помощью jQuery


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

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

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

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

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

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

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

4 56

4 ответа:

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

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

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

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

$('html').html(myString.replace(/<html>(.*)<\/html>/, ""));

другой вариант, чтобы попробовать может быть

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

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

по крайней мере в Firefox(47.0) решение:

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

не работает, как предлагалось, так как нажатие кнопки " Назад "в firefox по - прежнему загружает предыдущую запись истории-т. е. весь смысл использования" заменить "заключается в том, чтобы пользователи не нажимали кнопку "назад" только для того, чтобы их приветствовал вид страницы до последнего времени документа.записать() был вызван. Способ сделать это, который не вызывает вышеупомянутого эффекта, просто вызывает методы на объекте документа непосредственно:

document.open("text/html", "replace");
document.write(response);
document.close();

С помощью замены параметра не только позволяет избежать заполнения пользователям историю с мусором, но и помогает в решении проблем, которые возникают из-за странных отношениях, в каких браузерах часто обрабатывать элементы истории, созданные с помощью JavaScript, как иногда позволяя браузер для регистрации изменений, внесенных в документ с помощью JavaScript в истории может иметь неожиданные результаты при обработке спины/форвардные операции (например, добавление 'wyciwyg://(somenumber)' к URL-адресу после выполнение документа.напишите () на документе, история которого была возвращена в предыдущее состояние).