Удалить весь контент, используя чистый JS - PullRequest
16 голосов
/ 22 ноября 2010

Я ищу способ удалить весь контент веб-страницы, используя чистый Javascript - без библиотек.

Я пытался:

document.documentElement.innerHTML = "whatever";

, но это не работает: он заменяет внутреннюю часть элемента <html/>. Я смотрю на замену всего документа, включая, если возможно, декларации doctype и <?xml.

Ответы [ 9 ]

26 голосов
/ 22 ноября 2010

Я думаю, что браузер по праву полагает, что страница с типом контента text/html всегда будет веб-страницей, так что вы можете сделать что-то вроде ...

document.body.innerHTML = '';

В нем все еще будет какой-то HTML.

Вы можете попробовать ...

document.documentElement.innerHTML = '';

... что оставило меня с <html></html>.

И Цзян предложил что-то умное.

window.location = 'about:blank';

Это выведет вас на пустую страницу - внутренний механизм, предоставляемый большинством браузеров, как мне кажется.

Я думаю, однако, лучшее решение - использовать document.open(), который очистит экран.

3 голосов
/ 24 октября 2014

Согласно статье Доторо о методе document.clear , они (поскольку он устарел) вместо этого рекомендуют вызывать document.open, что очищает страницу, поскольку начинается новый поток.

Таким образом, вы избегаете мерзкого about:blank взлома.

3 голосов
/ 22 ноября 2010
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);
}
1 голос
/ 22 ноября 2010

После того, как страница уже полностью загружена:

document.write('');
document.close();
0 голосов
/ 12 января 2018

Я полагаю, что это все равно оставит узел doctype без изменений, но:

document.documentElement.remove()

или эквивалент

document.getElementsByTagName("html")[0].remove()

0 голосов
/ 12 января 2018
document.documentElement.innerHTML='';
document.open();

Метод Document.open () открывает документ для записи. если вы не используете метод open, вы не можете изменить Document после установки innerhtml в пустую строку

0 голосов
/ 04 августа 2016

УДАЛИТЕ ВСЕ, НО ---! DOCTYPE html ---

var l = document.childNodes.length;    
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; }

ИСПЫТАНО НА ИНСПЕКТОР FIREFOX - childNodes [1] IS ---! DOCTYPE html ---

0 голосов
/ 22 ноября 2010

Мне просто интересно, почему вы хотите это сделать. Теперь нет никакого способа, которым я знаю, чтобы заменить абсолютно все вплоть до объявления doctype, но если вы хотите пойти на такую ​​длину, почему бы не перенаправить пользователя на специально созданную страницу с нужным шаблоном с нужным типом документа, а затем заполнить там контент?

РЕДАКТИРОВАТЬ: в ответ на комментарий вы можете удалить весь контент, затем создать фрейм iframe, чтобы он заполнил всю страницу, и тогда вы получите полный контроль над контентом. Имейте в виду, что это большой взлом и, вероятно, будет очень больно, но это сработает:)

0 голосов
/ 22 ноября 2010

Я верю, что это сделает

document.clear()  //deprecated

window.location = "about:blank"  //this clears out everything
...