2012-03-18 7 views
1

Juste essayer de mettre en place une petite page de test et même il ne se comporte pas comme prévu.pourquoi document.write ne se termine pas comme prévu

Vu le code de travail suivant:

<!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> 

Je reçois ce que je pense, une ligne du html et page de test de Terry dans l'étiquette de l'onglet. Cependant, si j'ajoute juste avant la ligne </head>:

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

je reçois bien le « des » js ligne - pas de html depuis document.write remplace - mais le libellé de l'onglet n'est pas rempli de Terry Page de test. Dans IE, l'étiquette de l'onglet affiche l'url, dans Firefox, elle montre 'Connecting ...' mais cela ne va jamais au-delà.

Qu'est-ce que c'est que document.write que je ne comprends pas? Dois-je émettre une sorte de fin de fichier ou une autre?

Répondre

3

Puisque vous appelez document.write après chargement de la page, il appelle document.open, qui se vide l'ensemble documents. Le navigateur fait de son mieux et crée un nouveau document complet avec ce que vous fournissez. Le document n'est pas seulement le contenu du body, mais tout le reste aussi.

Dans votre cas, votre document est <p>from the js</p>, mais étant donné que ce n'est pas un document HTML valide (manquant html, head et body), le navigateur ajoutera ce qui est nécessaire.

Par exemple prendre

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

Cela suffit de créer un vide body, mais définir le titre de la page foo.

+0

Si l'appel document.write() est directement intégré dans le code HTML, il n'appellera pas document.open(). – j08691

+0

@ j08691: Oui, j'ai clarifié ma réponse. –

+0

@ Felix-Kling est juste ici, parce que vous mettez document.write() dans la tête avant le corps que vous remplacez essentiellement le corps. Vous devez l'utiliser dans le corps du document si vous voulez que votre balisage apparaisse ici. – davidethell

2

document.write n'est plus largement utilisé, en particulier avec jQuery. Vous devriez utiliser append ou insert à la place. Cela dit, cela fonctionne, mais ce n'est pas recommandé: http://jsbin.com/upamem

+2

S'il est vrai qu'il faut être prudent avec 'document.write', cela ne répond pas vraiment à la question. –

Questions connexes