2010-02-17 3 views
1

Сохраните следующее в файле (например, file.htm), и оно работает => выводит «3». Но если я раскомментирую строку 'document.write ("Hello:");' он больше не работает (выводит «0»). Кто-нибудь знает почему?Weird output with document.links.length

<html> 
<head> 
<script language="JavaScript" type="text/javascript"> 
function display() { 
    //document.write("Hello: "); 
    document.write(document.links.length + "<br>"); 
} 
</script> 
</head> 
<body onload="display()"> 

<A href="link0.htm">Link 0</A> 
<A href="link1.htm">Link 1</A> 
<A href="link2.htm">Link 2</A> 

</body> 
</html> 

ответ

6

В Chrome я наблюдаю это поведение, и большинство других браузеров, вероятно, тоже. Причина заключается в следующем:

Без первых document.write он работает должным образом. Здесь ничего особенного.

Но когда вы включаете первый document.write, он перезаписывает все содержимое документа, поэтому никаких ссылок не осталось. Второй document.write правильно сообщает, что в документе есть 0 ссылок.

+0

Написал это на самом деле! Хорошая работа – vpram86

+2

В основном, не используйте document.write. Когда-либо. – Matchu

+0

Я пробовал его в IE, Firefox и Chrome. Я думаю, что вы правильно, а ур объяснения очень ясны. Благодаря! – yeeen

1

Во-первых, не используйте document.write() для «отображения» вашего вывода. Если это всего лишь тест, используйте метод alert(). document.write() должен использоваться только во время загрузки страницы. Когда поток будет закрыт и документ будет загружен, document.write() будет иметь непредсказуемые результаты.

Во-вторых, вместо использования document.links попробуйте использовать document.getElementsByTagName ("A"). Это даст вам массив всех якорных тегов в документе.

+0

Может быть полезно для других тегов, но как подсчитать количество тегов с помощью «___» в документе? – yeeen

+0

Вы не задавали этот вопрос. Вы спрашивали о ссылках (), иначе называемых «привязными» тегами, и ваш пример показал именно те теги и ничего больше. – Robusto

+0

Мой пример точно подсчитывает количество якорных тегов. – yeeen

0

Потому что, когда вы звоните document.write в первый раз, он удаляет все ссылки из DOM. Он заменяет весь внутреннийHTML document.body на «Hello:».

В любом случае вы никогда не должны использовать document.write.