HasChildNodes()

Привет! Никак не могу понять почему у меня не работает вот этот скрипт
<html>    <head>        <title>JavaScript</title>        <style>            #first    {                    color: red;                }        </style>        <script type="text/javascript" >                        function pruef() {                //document.body.innerHTML = document.body.innerHTML.replace(/[\r\n|\s] /g, '');                alert(" " + document.body.childNodes[0].hasChildNodes());            }                    </script>    </head>    <body>        <h1 id="first">Hallo&nbsp; DOM<b> Das <strong>ist</strong> ein Kindelement</b></h1>        <p>Ein &nbsp;<strong><em>kurzes</em></strong> Beispiel</p>        <div>1.&nbsp;Das&nbsp;ist&nbsp;ein&nbsp; DIV-&nbsp; Element</div>        <div>2.&nbsp;Das &nbsp;ist&nbsp;ein&nbsp;zweiter&nbsp;DIV-&nbsp;Element</div>        <div>3.&nbsp;Das ist das dritte DIV- Element <a href="#" onClick="pruef();">&Uuml;berpr&uuml;fen</a></div>    </body></html>
в IE работает, то есть возвращает true а в FireFoxe нет, говорит false... и так со многини методами, в IE всё работает а в ФайерФоксе нет... я смотрел документацию, это типа core DOM я понимаю... но так же вижу alert который говорит false!!! В чём может быть дело?
1 ответ

В том, что лиса держит в DOM всё, включая пробелы от отступов (как текстовые ноды). Да это не удобно и портит массу  нервов, но так придумали w3.org (ещё хуже, что нельзя сразу выбрать всех потомков, .getElementsByTagName ищет в глубину тоже).Вывод, взять .firstChild и затем перебирать .nextSibling пока .nodeType != 1, либо использовать (довольно громоздкий в стандартном API) XPath, либо использовать либу-обёртку для удобства.