1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Não consigo aceder ao body através de DOM (javascript)

Discussão em 'Web Development' iniciada por mj2p, 13 de Setembro de 2008. (Respostas: 4; Visualizações: 682)

  1. mj2p

    mj2p I'm Cool Cuz I Fold

    Boas pessoal. Estou agora a dar os primeiros passos em javascript, e deparei-me desde logo com um problema. Tenho uma página em que no <body> tenho três parágrafos. Faço então document.getElementsByTagName("p") para os encontrar.

    Desta forma deveria ter uma colecção de nós cujas tags são <p>. Mas simplesmente não tenho nada. E o mais estranho ainda, é que quando faço document.getElementsByTagName("*"), para ter uma colecção de todos os nós da minha página web, esta colecção só tem o nó <html>, o nó <head> e depois só mais todos os outros que estão contidos em <head>.

    Como faço para aceder aos nós mais interiores de uma página web?

    Vá, cumps
     
  2. p3dro

    p3dro Power Member

    Podias colocar aqui o teu código completo?

    Se por ex. fizeres isto:

    Código:
    <html>
    <head>
      <script type="text/javascript" language="javascript">
        DOMTest = function(){
          var elems=document.getElementsByTagName("p");
          for(var i=0,count=elems.length;i<count;i++){
            alert(elems[i].innerHTML);
          }
        }
      </script>
    </head>
    <body onload="DOMTest()">
      <p>Parágrafo 1</p>
      <p>Parágrafo 2</p>
      <p>Parágrafo 3</p>
    </body>
    </html>
    Vão aparecer 3 caixas de mensagem com o conteúdo dos 3 parágrafos. Mas também podes ir directamente ao elemento body e obter todos os elementos com tag <p>, por ex. document.body.getElementsByTagName("p"), que neste caso irá dar exactamente o mesmo resultado.

    Porém se usasses o getElementsByTagName("*"), ai sim iria dar um resultado diferente, consoante fosse document ou document.body
     
  3. mj2p

    mj2p I'm Cool Cuz I Fold

    Ok, o teu código resultou. No entanto, fui mexer um pouco nele para ver se encontrava a possível razão para não estar a funcionar comigo. E quando retirei o evento "onLoad" da tag do <body> ele já não correu como previsto, mesmo tendo colocado o script a executar automaticamente quando a página abre.

    Isto tem algo a haver com o facto de quando o script está programado para correr mal a página abra, este correr antes mesmo de serem "criados" os conteúdos HTML?

    Esclarece-me se puderes.

    Vá, cumps
     
  4. hostmake

    hostmake Power Member

    Eu acho que sim, dai ser atribuído ao onload da tag body, antes ele simplesmente não tem nada para mostrar
     
  5. p3dro

    p3dro Power Member

    Se tirares o body onload, podes ter outras 2 hipóteses, usar algo deste tipo:
    Código:
      <script type="text/javascript" language="javascript">
        DOMTest = function(){
          var elems=document.body.getElementsByTagName("p");
          for(var i=0,count=elems.length;i<count;i++){
            alert(elems[i].innerHTML);
          }
        }
        window.onload=DOMTest;
      </script>
    Ou então chamares a função mesmo antes do </body>
    Código:
      ........
      <p>Paragrafo 3</p>
      <script type="text/javascript" language="javascript">
        DOMTest();
      </script>
      </body>
    Se por ex. chamares a função DomTest dentro do <head> a função só vai actuar sobre o html renderizado até então. Experimenta por ex. fazer isto e vês que ele só vai "ler" até ao </head>
    Código:
      <script type="text/javascript" language="javascript">
        DOMTest = function(){
          var elems=document.getElementsByTagName("*");
          for(var i=0,count=elems.length;i<count;i++){
            alert(elems[i].innerHTML);
          }
        }
        DOMTest();
      </script>
     

Partilhar esta Página