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


Автор: semi 5.6.2007, 23:28
собственно...
в ie все нормально, алерт выдает 11111. а ff и opera молчат :( 
Подскажите, в чем может быть проблема?
Код

<html>
    <head>
    <script language=javascript>        
        function ttt (){
            var myBody = document.getElementsByTagName("body");        
            var p = myBody[0].childNodes[0].firstChild.nodeValue;
            alert(p);
        }

    </script>
    </head>
    <body>
        <p>11111</p>

    <script language=javascript>
        ttt();
    </script>
    </body>
</html>

p.s. нужно именно в такой последовательности, сначала ищем body, затем его первого чилдрена и его содержимое... т.е. 
Код

var myP = document.getElementsByTagName("p");        
alert(myP[0].firstChild.nodeValue);

не подходит :(

Автор: Zeroglif 5.6.2007, 23:57
Если алертом начать проверять, кто такой childNodes[0], ты увидишь, что это не то, что нужно. Сожми код (переносы и пробелы долой) и всё будет работать.

Код

<body><p>11111</p>





Автор: Rodman 6.6.2007, 10:47
от Semi

A если я не могу сжать, есть какой нить выход? Подобная конструкция используется при разборе входящего xml-документа, a нa eгo сжатие я нe мoгу повлиять.

Автор: Zeroglif 6.6.2007, 13:13
Было сказано, что

Цитата(semi @  5.6.2007,  23:28 Найти цитируемый пост)
нужно именно в такой последовательности, сначала ищем body, затем его первого чилдрена и его содержимое


то есть, нужен строго именно "первый чилдрен", отсюда предложение сжать код. 

Если же порядок обращения можно всё-таки поменять, то надо просто учитывать, что gecko видит в DOM "пустоты", для него нужная вам нода будет childNodes[1], а нет в childNodes[0], ну, или другим способом достаньте ноду, более универсальным (по тегу, по id)...



Автор: semi 6.6.2007, 14:26
Цитата(Zeroglif @  6.6.2007,  13:13 Найти цитируемый пост)
Если же порядок обращения можно всё-таки поменять, то надо просто учитывать, что gecko видит в DOM "пустоты", для него нужная вам нода будет childNodes[1]

будем знать... 

Zeroglif, спасибо за помощь. 

Автор: lexxICON 6.6.2007, 14:29
К примеру..
Код

       function ttt (){
            var myBody = document.getElementsByTagName("body")[0], p = myBody.firstChild;
        while (p && p.nodeType != 1) { 
            p = p.nextSibling;
        }
        if (p && p.firstChild) { 
            alert(p.firstChild.nodeValue);
        } else { 
            //Exception
        }
        }

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