mirniy,
Не каряво это свойство работает только под IE. Это связано с тем, что разные браузеры по разному определяют объекты узлов. FF, Opera, Netscape, Safari за объекты узлов (а именно текстовые узлы) также принимают пробелы и символы разрыва строки. Есть некоторые способы для этих браузеров, чтобы добиться нормального результата.
Первый способ.
Не использовать пробелы и символы разрыва строки.
То есть вместо того, чтобы писать так
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
</head>
<body onload="alert('Дочерних узлов - ' + document.getElementsByTagName('div')[0].childNodes.length)">
<div>
<span></span>
</div>
</body>
</html>
Записать вот так
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
</head>
<body onload="alert('Дочерних узлов - ' + document.getElementsByTagName('div')[0].childNodes.length)">
<div><span></span></div>
</body>
</html>
Второй способ.
Использовать цикл совместно со свойством nodeType. Это необходимо для проверки того, какие узлы являются элементами.