2012-03-18 3 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> линии:

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

я правильно получить «от JS» линии - не от HTML, так как document.write заменяет его - но вкладка метка не заполнена Терри Страница испытаний. В IE на ярлыке вкладки отображается URL-адрес, в Firefox он показывает «Подключение ...», но он никогда не выходит за рамки этого.

Что это о документе.write, что я не понимаю? Должен ли я выпускать какой-то конец файла или какой-то такой?

ответ

3

Поскольку вы звоните document.write после загрузки страницы, он вызывает document.open, который опустошает весь документ. Браузер делает все возможное и создает полный новый документ с тем, что вы предоставляете. Документ представляет собой не только контент в body, но и все остальное.

В вашем случае, ваш документ <p>from the js</p>, но так как это не является допустимым HTML документ (отсутствует html, head и body), браузер добавит то, что необходимо.

Например, возьмем

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

Это будет просто создать пустой body, но установить заголовок страницы foo.

+0

Если вызов document.write() встроен непосредственно в код HTML, он не будет вызывать document.open(). – j08691

+0

@ j08691: Да, я уточнил свой ответ. –

+0

@ Феликс-Клинг прямо здесь, потому что вы положили document.write() в голову перед телом, по существу заменяющим тело. Вы должны использовать его в теле документа, если хотите, чтобы ваша разметка появилась там. – davidethell

2

document.write больше не используется, особенно с jQuery. Вместо этого вы должны использовать append или insert. Тем не менее, это не работает: http://jsbin.com/upamem

+2

Хотя верно, что нужно быть осторожным с 'document.write', это не отвечает на вопрос. –

Смежные вопросы