Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel - Fatec

Objeto DOM Firefox vs IE

Recommended Posts

Bom dia a todos. Desde ontem estou quebrando a cabeça com um problema. Tenho o código abaixo que só funciona no IE e não funciona no firefox:

 


 

for(var i =0; i < nos.length;i++)

{

var no = nos;

var nome = no.childNodes[0].firstChild.nodeValue;

var imagem = no.childNodes[1].firstChild.nodeValue;

 

alert(nome+" "+imagem);

} _linenums:0'>var nos = xmldoc.getElementsByTagName('carro'); for(var i =0; i < nos.length;i++){ var no = nos; var nome = no.childNodes[0].firstChild.nodeValue; var imagem = no.childNodes[1].firstChild.nodeValue; alert(nome+" "+imagem);}

Em um tópico aqui no imasters um colega estava dizendo que o FF inicia contar os nós por 1 e o IE por 0, mas se eu coloco 1 e 2 também não funciona no firefox.

 

Alguém sabe como resolver esse problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em um tópico aqui no imasters um colega estava dizendo que o FF inicia contar os nós por 1 e o IE por 0, mas se eu coloco 1 e 2 também não funciona no firefox.

A questão não é que o FF inicia os Nodes em 1 e sim que o FF conta os espaços como NodeText e o IE não. Portanto se você criar uma estrutura assim:

<div><p>forum</p></div>
No FF o elemento <p> vai ser o segundo ChildNode e vai possuir index 1, e no IE o elemento <p> vai ser o primeiro ChildNode com index 0.

 

O index 0 nesse caso no FF vai ser um NodeText vazio.

 

Para deixar o seu script CrossBrowser você tem que verificar o TypeNode antes de atribuir as variáveis nome e imagem.

 

Uma ótima fonte sobre Javascript/DOM é o site do W3SCHOOLS.

 

Qq dúvida, postae.

 

OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Vagner, obrigado pela atenção.

 

eu to pegando os dados de um xml com a seguinte estrutura:

 

<?xml version="1.0" encoding="utf-8"?><carros>	<carro>		<nome>GOL</nome>		<imagem>gol.jpg</imagem>	</carro>	<carro>		<nome>ASTRA</nome>		<imagem>astra.jpg</imagem>	</carro></carros>
quando nos = xmldoc.getElementsByTagName('carro'), nos vai ter nos[0].nome, nos[0].imagem e

nos[1].nome, nos[1].imagem certo ?

 

quando eu faço o for

 

for(var i =0; i < nos.length;i++)

no = nos quando i for 0 o no vai valer carro[nome(gol),imagem(gol.jpg)]

no = nos quando i for 1 o no vai valer carro[nome(astra),imagem(astra.jpg)]

 

dai pra pegar o valor das tags não vai ser no.childNodes[0].firstChild.nodeValue pra pegar o valor de nome e no.childNodes[1].firstChild.nodeValue; pra pegar o valor de imagem ??

 

agora não consigo ver o que está errado, não entendi muito a relação do que você disse e esse problema.

 

valeu irmão, se você puder me ajudar serei grato.

 

T++

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara é porque dentro de carro tem <nome>texto<nome>

são dois elementos diferentes, e ele roda o for pra cada um deles...

 

se ainda não entendeu, experimenta jogar dentro do for um alert nos.tagName...

 

Qualquer dúvida volta a perguntar

abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O node <carro> do seu arquivo XML possuí 2 elementos o NOME e a IMAGEM, porém, o padrão do W3c que o FF segue interpreta mais 3 elementos do tipo TextNode.

 

O FF lê seu XML assim:

 

<carro>

ChildNode[0]: <TextNode Vazio>

ChildNode[1]: <nome>GOL</nome>

ChildNode[2]: <TextNode Vazio>

ChildNode[3]: <imagem>gol.jpg</imagem>

ChildNode[4]: <TextNode Vazio>

</carro>

 

E o IE lê assim:

 

<carro>

ChildNode[0]: <nome>GOL</nome>

ChildNode[1]: <imagem>gol.jpg</imagem>

</carro>

 

 

Para você atribuir as suas variáveis nome e imagem o valor correto, você precisa verificar no seu loop se o tipo de node(método NodeType) é igual a 1(ELEMENT_NODE).

 

A fonte do W3SCHOOLS tem muitas informações e exemplos sobre XML/DOM e sobre o método NodeType.

 

OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda Vagner e Eric.Bom , agora entendi o problema, só não entendi pq o padrão w3c tem esses text nodes vazios, to vendo se consigo achar as resposta no w3schools.Muito obrigado mesmo galera.só mais uma coisa, de quem eu tenho que ver o nodeType, eu coloquei no.childNodes[1].NodeType e deu indefinido.´T++

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu pela ajuda Vagner e Eric,graças a vocês consegui resolver a treta. nem usei o type node, comparei pelo nome do nó mesmo.

 


for(var i =0; i < nos.length;i++)

{

var no = nos;

for(var filho = 0; filho < no.childNodes.length; filho++)

{

if(no.childNodes[filho].nodeName == 'nome')

var nome = no.childNodes[filho].firstChild.nodeValue;

else if(no.childNodes[filho].nodeName == 'imagem')

var imagem = no.childNodes[filho].firstChild.nodeValue;

alert(nome+" "+imagem);

}

} _linenums:0'>var nos = xmldoc.getElementsByTagName('carro');for(var i =0; i < nos.length;i++){ var no = nos; for(var filho = 0; filho < no.childNodes.length; filho++) { if(no.childNodes[filho].nodeName == 'nome') var nome = no.childNodes[filho].firstChild.nodeValue; else if(no.childNodes[filho].nodeName == 'imagem') var imagem = no.childNodes[filho].firstChild.nodeValue; alert(nome+" "+imagem); }}

agora ta funcionando tanto no IE quanto no firefox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa... eu já fiz algo do tipo mas comparando com o tagName (que da na mesma do nodeName nessa situação).. não quis colar o código pra você tentar e resolver... parabens. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK... o lance é que comparando pelo NodeType você pode carregar um XML mesmo sem conhecer os Nodes!Qq dúvida postae! OK..!!?? T+...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veleu Eric, é da hora a sensação de ter resolvido o problema hehe ... vale pela forçaEntão Vagner, eu tentei usar o Nodetype mas ele só retorna indefinido. phoda hehe, mas pra essa situação o nodeName já serviu. você tem algum exemplo utilizando o nodeType ?flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

No site do W3SCHOOLS, tem vários exemplos editáveis sobre manipulação de Nodes através de DOM.

 

Provavelmente você nem olhou direito... oq é uma pena, pois essa é a referência oficial que eu utilizo para desenvolver aplicações CrossBrowser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu olhei sim Vagner, fiz uns testes com alguns exemplos deles, mas o nodetype não funcionou comigo. De qualquer forma vou procurar por outros exemplos la. meu Inglês não ajuda muito hehe, mas com um esforço tudo dá hehevlw

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.