Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > hasChildNodes()


Автор: Entwickler 5.3.2008, 12:43
Привет! Никак не могу понять почему у меня не работает вот этот скрипт
Код

<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!!! В чём может быть дело?

Автор: Sardar 5.3.2008, 13:08
В том, что лиса держит в DOM всё, включая пробелы от отступов (как текстовые ноды). Да это не удобно и портит массу  нервов, но так придумали w3.org (ещё хуже, что нельзя сразу выбрать всех потомков, .getElementsByTagName ищет в глубину тоже).

Вывод, взять .firstChild и затем перебирать .nextSibling пока .nodeType != 1, либо использовать (довольно громоздкий в стандартном API) XPath, либо использовать либу-обёртку для удобства.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)