segunda-feira, 13 de junho de 2011

jQuery explica a diferença entre Internet Explorer e Mozilla like

Fomos motivados a escrever este post para que TODOS entendam a diferença de interpretação entre o browser Internet Explorer e os Mozilla like (Chrome, Flock, Opera, Firefox).

Para isto vamos dar um exemplo (somos objetivos):


<html>
<head>
<script type="text/javascript" src="jquery-1.6.1.js"></script>
<script type="text/javascript">

jQuery.noConflict();


function abre(){
jQuery("div").each(function(){
document.write(jQuery(this).attr("class"));
});
}

</script>

</head>
<body onLoad="abre();">
<div class="hq pagina">
<div class="hq tira">
<div class="hq quadro"><div class="hq texto">fff</div></div>
<div class="hq quadro"><div class="hq texto">ggg</div></div>
</div>
<div class="hq tira">
<div class="hq quadro duplo"><div class="hq texto">hhh</div></div>
</div>
<div class="hq tira">
<div class="hq quadro"><div class="hq texto">mmm</div></div>
<div class="hq quadro"><div class="hq texto">nnn</div></div>
</div>
</div>
</body>
</html>

O que faz este código (não esqueça de incluir o jquery-1.6.1.js) é listar as classes das tags DIV.

Resultado no Chrome/Firefox:



Resultado no Internet Explorer:


O Internet Explorer é deficiente e ingrato. Ficamos por dois dias em cima deste comportamento anômalo, até descobrir a grande contradição do Internet Explorer:

Imediatamente após colocar na tela um resultado de script javascript, ele DESTRÓI o conteúdo da página base. Ele não tem buffer.

E como resolver ?

Rescreeva o código javascript assim:


function abre(){
var s = "";
jQuery("div").each(function(){
s = s + jQuery(this).attr("class");
});
document.write(s);
}

Desta forma, como os resultados do jQuery são armazenados em um buffer (variável s), a página não é destruída en quanto o HTML é lido pelo jQuery.

Problema Resolvido, pois Deus é poderoso.