web-dev-qa-db-ja.com

純粋なJSを使用してすべてのコンテンツを削除する

ライブラリではなく、純粋なJavascriptを使用してWebページのコンテンツ全体を削除する方法を探しています。

私は試した:

document.documentElement.innerHTML = "whatever";

しかし、それは機能しません:<html/>要素の内部を置き換えます。私は、可能であればdoctypeおよび<?xml宣言を含め、ドキュメント全体を置き換えることを検討しています。

21

私はブラウザがコンテンツタイプ_text/html_のページが常にWebページであると正しく想定していると思います。

_document.body.innerHTML = '';
_

それでもHTMLがぶら下がっています。

あなたは試すことができます...

_document.documentElement.innerHTML = '';
_

...これにより_<html></html>_が残りました。

Yi Jiang は何か賢いことを提案しました。

_window.location = 'about:blank';
_

これにより、空白のページが表示されます-私が信じているほとんどのブラウザが提供する内部メカニズム。

ただし、最善の解決策は、画面をクリアするdocument.open()を使用することです。

35
alex
var i = document.childNodes.length - 1;

while (i >= 0) {
  console.log(document.childNodes[i]);
  document.removeChild(document.childNodes[i--]);
}

FF 3.6、Chrome 3.195、およびSafari 4.0)のすべて(doctypeも)を削除します。子が親を削除しようとしているため、IE8が機能しなくなります。


しばらくしてから、次のようにすることもできます。

while (document.firstChild) {
  document.removeChild(document.firstChild);
}
3
Ben

document.clearメソッドに関するDotoroの記事 によると、新しいストリームを開始するため、代わりにdocument.openを呼び出すことをお勧めします。これにより、ページがクリアされます。

これにより、厄介なabout:blankハックを回避できます。

ページが既に完全に読み込まれた後:

document.write('');
document.close();
1
PleaseStand

これでうまくいくと思います

document.clear()  //deprecated

window.location = "about:blank"  //this clears out everything
0
John Hartsock
document.documentElement.innerHTML='';
document.open();

Document.open()メソッドは、書き込み用にドキュメントを開きます。 openメソッドを使用しない場合、innerhtmlを空の文字列に設定した後でDocumentを変更できません

0
Kursat Turkay

私はこれでもDoctypeノードがぶら下がったままになると信じていますが、

document.documentElement.remove()

または同等のもの

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

0
Fiddles