En cuanto a los eventos hay otras optimizaciones que podés hacer. Sucede que en Explorer (no sé si se solucionó en la versión 8, pero antes ocurría así) maneja 2 motores diferentes para objetos DOM y objetos javascript (2 mundos) y a veces tiene problemas para relacionar ambos mundos y cuando intentamos destruir algo en un mundo termina no destruyéndose porque hay referencias a ese mismo objeto en el otro mundo. Algo que propicia eso es declarar los eventos de esta manera:
Código PHP:
objeto.onclick=function(){...}
Una manera de no propiciar eso es colocar los eventos vía DOM **. El problema es de nuevo Explorer, que usa su propio estandar y para agregar eventos usa el método attachEvent. Los navegadores estandar usan el método addEventListener. Por eso hay que buscar un camino que se adapte a cada navegador. Para eso pudés usar funciones como esta:
Código PHP:
function addEvent(obj,fun,type){
if(obj.addEventListener){
obj.addEventListener(type,fun,false);
}else if(obj.attachEvent){
var f=function(){
fun.call(obj,window.event);
}
obj.attachEvent('on'+type,f);
obj[fun.toString()+type]=f;
}else{
obj['on'+type]=fun;
}
}
function removeEvent(obj,fun,type){
if(obj.removeEventListener){
obj.removeEventListener(type,fun,false);
}else if(obj.detachEvent){
obj.detachEvent('on'+type,obj[fun.toString()+type]);
obj[fun.toString()+type]=null;
}else{
obj['on'+type]=function(){}
}
}
que sirven para agregar y quitar eventos respectivamente.
Y se usarían, por ejemplo de esta manera:
Código PHP:
addEvent(document.getElementById('algo'),function(e){alert(this.id);},'click');
Pero para ver bien los eventos te recomiendo este artículo:
http://kusor.net/traducciones/brainj...rodom1.es.html
**Ojo, esto no soluciona totalmente el problema, pero lo mejora bastante.