Удалите все содержимое с помощью чистого JS
Я ищу способ удалить весь контент веб-страницы, используя чистые библиотеки Javascript - no.
Я пробовал:
document.documentElement.innerHTML = "whatever";
но это не работает: оно заменяет внутреннюю часть элемента <html/>
. Я смотрю на замену всего документа, включая, если возможно, объявление doctype
и <?xml
.
Ответы
Ответ 1
Я думаю, что браузер по праву предполагает, что страница с типом контента text/html
всегда будет веб-страницей, поэтому пока вы можете сделать что-то вроде...
document.body.innerHTML = '';
У него все еще будет висящий HTML.
Вы можете попробовать...
document.documentElement.innerHTML = '';
..., который оставил меня с <html></html>
.
Йи Цзян предлагал что-то умное.
window.location = 'about:blank';
Это приведет вас к пустой странице - внутреннему механизму, предоставляемому большинством браузеров, которые я считаю.
Я считаю, что лучшим решением является использование document.open()
, который очистит экран.
Ответ 2
var i = document.childNodes.length - 1;
while (i >= 0) {
console.log(document.childNodes[i]);
document.removeChild(document.childNodes[i--]);
}
Удаляет все (doctype) также на FF 3.6, Chrome 3.195 и Safari 4.0. IE8 прерывается, так как ребенок хочет удалить родителя.
Повторное создание позже, также можно сделать следующим образом:
while (document.firstChild) {
document.removeChild(document.firstChild);
}
Ответ 3
Согласно статье статьи Dotoro по методу document.clear, они (с тех пор, как устарели) рекомендуют вместо этого называть document.open
, что очищает страницу, так как он запускает новый поток.
Таким образом, вы избегаете неприятного взлома about:blank
.
Ответ 4
После того, как страница уже полностью загружена:
document.write('');
document.close();
Ответ 5
Я верю, что это сделает это
document.clear() //deprecated
window.location = "about:blank" //this clears out everything
Ответ 6
Мне просто интересно, почему вы хотите это сделать. Теперь нет того, что я знаю, чтобы заменить абсолютно все до декларации doctype, но если вы хотите пойти на эти длины, то почему бы не перенаправить пользователя на специально созданную страницу с шаблоном, который вам нужен, с требуемым типом doctype, а затем заполнить там контент?
EDIT: в ответ на комментарий, что вы можете сделать, это удалить весь контент, а затем создать iframe, чтобы он заполнил всю страницу, а затем вы полностью контролируете содержимое. Имейте в виду, что это большой взлом и, вероятно, будет очень болезненным, но он будет работать:)
Ответ 7
document.documentElement.innerHTML='';
document.open();
Метод Document.open() открывает документ для записи.
если вы не используете открытый метод, вы не можете изменить документ после установки innerhtml на пустую строку
Ответ 8
Я считаю, что это все равно оставит doctype node висящим, но:
document.documentElement.remove()
или эквивалентный
document.getElementsByTagName("html")[0].remove()
Ответ 9
УДАЛИТЕ ВСЕ, НО ---! DOCTYPE html ---
var l = document.childNodes.length;
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; }
ИСПЫТАНИЕ НА ИНТЕРНЕТЕ FIREFOX WEB - childNodes [1] IS ---! DOCTYPE html ---