Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

thiagocarneiro

DOM Não funciona no FireFox...

Recommended Posts

Olá,Estou com um pequeno problema para pegar a tag, ou o id de uma tag dentro de uma DIV. No IE ele reconhece certinho as tags, H1,H2,P .... já no Firefox ele me retorna apenas um "#text", ou seja, ele apenas reconhece q a devida tag é um bloco de texto.Segue abaixo o meu código para um melhor intendimento:

<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Untitled Document</title><script type="text/javascript">function opa(){ var idDivs = document.getElementsByTagName( 'div' ); for ( var i = 0 ; i < idDivs.length ; i++ ) { var teste = parseInt( idDivs[ i ].id ); //tenta transformar para inteiro o id das divs if( teste ) //caso o id seja um numero inteiro ele passa adiante { var issa = idDivs[ i ].childNodes[ 0 ].id; alert( issa ); } } }</script></head><body onload="opa()"><div id="1"> <h1 id="opa"></h1></div><div id="2"> <p>asda</p></div><div id="ummm"></div></body></html>

Algúém sabe como eu faço isso funcionar nos 2 browsers?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fleury,Acho que você não entendeu mto bem o meu problema.A variavel "issa" (que nome nãp!?) deveria receber o nome da tag que está dentro das divs, ou seja h1 ou p. Isso acontece realmente no IE porém no firefox, ele apenas reconhece as tags como #text, ou seja, elementos de texto, e eu precisava do nome exato da tag para um outro script que estou fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É o seguinte pessoal:

 

O Firefox interpreta o seu ENTER que há antes do H1 como sendo um texto que está dentro do DOM, sacou?? por isso que ele exibe este #text...

 

Se você olhar na árvore do DOM do firefox, você verá que o seu H1 na verdade é o 2o elemento e não o 1o, pois o 1o é um ENTER que está antes do H1.

 

Consequentemente, para pegar o id ou tagName do H1 (ou qualquer outra propriedade), você tem que endereçar o 2o elemento e não o primeiro. (ou então junta todas suas tags sem nenhum espacinho ou enter entre elas pois isto é interpretado como texto no DOM)

 

Seu código correto ficaria:

<script type="text/javascript">function opa(){var idDivs = document.getElementsByTagName( 'div' );for ( var i = 0; i < idDivs.length; i++ ){var teste = parseInt( idDivs[ i ].id ); //tenta transformar para inteiro o id das divsif( teste ) //caso o id seja um numero inteiro ele passa adiante{var issa = idDivs[ i ].childNodes[ 1 ].id; //A MUDANÇA ESTÁ AQUI...alert( issa );}}}</script>

Lembrando que, caso você tenha se expressado mal e queira exibir o tipo da tag (h1,p,div) em vez de exibir seu ID (que é como se fosse o nome da tag), você deve usar o atributo tagName...

Compartilhar este post


Link para o post
Compartilhar em outros sites

melhorando...

if( teste ) //caso o id seja um numero inteiro ele passa adiante		{		  var indice = 0;			if (!ie) indice++;			var issa = idDivs[ i ].childNodes[ indice ].getAttribute("id");			alert( issa );		}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.