Tem que ter o DOM(desatando os nós)

by renie on jan 25th in Tutoriais Desenvolvimento

Logo do JavascriptNesse terceiro post da série de DOM, vamos falar sobre os nós.

No nosso primeiro post expliquei que ‘nó’ é o nome que se dá a cada divisão da árvore do document , sendo assim hoje vou explicar como acessar esses nós.

Para acessar os nós abaixo de um outro nó, precisamos primeiro acessar esse primeiro nó da forma que eu mostrei no post anterior, com document.getElementById , e, em seguida precisamos pedir um array com os elementos filhos desse nó, isso é feito com o childNodes.  Ficaria então dessa forma:

document.getElementById(“idDoElementoPai”).childNodes

Aí precisamos fazer um for para pegar individualmente os elementos do array, assim como fizemos com o getElementsByTagName . Um bom código de exemplo seria:

</pre>
<html>
<head>
<script language="javascript" type="text/javascript">
     function mostraFilhos(){

        var elementoPai = document.getElementById("mae").childNodes;
        var resultado = "";

        for(contador = 0;contador<elementoPai.length;contador++){

            resultado += elementoPai[contador].nodeName;
            resultado += " / ";

        }

        alert(resultado);

     }
</script>
</head>
<body>
<div id="mae">
     <span></span>
     <input />
     <blockquote></blockquote>
</div>
<button onclick="mostraFilhos()">Ver Filhos</button>
</body>
</html>

Quando eu clicar no botão, ele vai chamar a função mostraFilhos() que vai pegar o array de elementos que estiverem dentro da tag com id “mae”. Aí então a função fará um for nesse array e vai pegar o nome de cada elemento através do nodeName e jogar numa variável que eu chamei de resultado. Por último dará um alert() no resultado. Teremos algo assim:
Alert do array de elementos

“Po mas bugou a parada!!!”. Não meu caro, é que ocorre o seguinte, o javascript entende os espaços em branco como nós, então ele entendeu o ENTER  como nós de texto. Mas não é nada que um if não resolva =D.

if(elementoPai[contador].nodeName != Node.TEXT_NODE)

e a partir daí podemos acessar quaisquer propriedades dos nós-filhos como pegar o nome da classe, dessa forma:

<html>
<head>
<script language="javascript" type="text/javascript">
       function mostraFilhos(){

            var elementoPai = document.getElementById("mae").childNodes;
            var resultado = "";

            for(contador = 0;contador<elementoPai.length;contador++){

                 if(elementoPai[contador].nodeName != Node.TEXT_NODE){

                     resultado += elementoPai[contador].className;
                  }
            }

            alert(resultado);
       }
</script>
</head>
<body>
<div id="mae">
      <blockquote ></blockquote>
</div>
<button onclick="mostraFilhos()">Ver Filhos</button>
</body>
</html>

Que resultará nesse alert:
Alert da classe de um dos nós do array de elementos

Ah, legal, você já consegue acessar todos os filhos de um nó, mas e se quiser acessar só o primeiro ou só o último filho de um nó? Simples, basta usar firstChild ou lastChild dessa forma:

<html>
<head>
<script language="javascript" type="text/javascript">
       function mostraFilhos(){

            var elementoPaiPrimeiro = document.getElementById("mae").firstChild.nodeName;

            var elementoPaiUltimo   = document.getElementById("mae").lastChild.nodeName;

            alert("Primeiro Filho:"+ elementoPaiPrimeiro +"\nÚltimo Filho:"+ elementoPaiUltimo);

       }
</script>
</head>
<body>
<div id="mae">
       <blockquote ></blockquote>
</div>
<button onclick="mostraFilhos()">Ver Filhos</button>
</body>
</html>

Que irá gerar o seguinte alert:
Alert do primeiro e último filho

Lembrando que ele pega aquele ENTER como elemento de texto.

Aí é só usar a imaginação pra brincar com os nós, acessando e modificando dinamicamente, estilos e funções de cada elemento.

Pra finalizar vou deixar uma tabelinha pra vocês que boiaram no Node.TEXT_NODE .

Tags

3 Comentários

  1. Ulisses Pinto

    25th janeiro 2010

    Eu pessoalmente não gosto de javascript acho uma linguagem muito inútil, gostaria de ver uns posts de ASP no seu blog!

    Obrigado

  2. Flávio Silveira

    25th janeiro 2010

    Cara…não dá pra entender facilmente o código assim solto….coloca um syntax highlight ai ou algo assim…..

    Valeu!!

  3. renie

    25th janeiro 2010

    sugestão acatada flávio ;)

Deixe um comentário

Powered By Wordpress Designed By Ridgey