2012-03-18 17 views
1

ちょうど小さなテストページを設定しようとしていても、期待通りに動作しません。次の作業のコードを考えるとdocument.writeが期待どおりに完了しないのはなぜですか?

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"> 
<title>Terry's Test Page</title> 
<script src='jquery-1.7.1.min.js'></script> 
</head> 
<body> 
    <p>from the html in index.html</p> 
</body> 
</html> 

私は私が期待するものを手に入れる、タブのラベルでhtmlとテリーのテストページから一行。私はちょうど</head>行の前に追加した場合しかし、: - のdocument.writeがそれに取って代わるため、HTMLからなし -

<script>$(document).ready(function() { 
document.write('<p>from the js</p>'); 
}); 
</script> 

は私がきちんと「からjsの」行を取得しますが、タブのラベルには、テリーので満たされていませんテストページ。 IEではタブラベルにURLが表示されますが、Firefoxでは「接続中...」と表示されますが、これを超えることはありません。

私が理解していないdocument.writeについて教えてください。何らかのファイルの終わりなどを発行する必要がありますか?

答えて

3

ページロード後にdocument.writeを呼び出したので、全体の文書を空にするdocument.openを呼び出します。ブラウザは、あなたが提供するものと完全に新しい文書を作成します。この文書は、bodyのコンテンツだけでなく、他のすべてのコンテンツでもあります。あなたのケースでは

、あなたの文書が<p>from the js</p>であるが、これは有効なHTMLドキュメント(htmlheadbodyを逃す)ではないので、ブラウザが必要だとするものを追加します。例えば

document.write('<head><title>foo</title></head>'); 

を取るこれは単に空bodyを作成するのではなく、fooにページのタイトルを設定します。

+0

document.write()呼び出しがHTMLコードに直接埋め込まれている場合、document.open()は呼び出されません。 – j08691

+0

@ j08691:はい、私は答えを明確にしました。 –

+0

@ Felix-Klingはここにあります。bodyの前にheadの中にdocument.write()を置くので、あなたは本質的にbodyを置き換えます。マークアップが表示されるようにするには、文書の本文でそれを使用する必要があります。 – davidethell

2

document.writeは、もはやjQueryでは特に広く使用されていません。代わりに、追加または挿入を使用する必要があります。つまり、動作しますが、推奨されません。http://jsbin.com/upamem

+2

'document.write'に注意する必要があるのは本当ですが、これは実際に質問に答えるものではありません。 –

関連する問題