Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/07/2007, 19:42
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: removeChild internet explorer problemas.

Lo más fácil para hacer debug es utilizar alert() para saber qué ocurre en cada momento.

Lo que está pasando es que al borrar un hijo, la longitud de lista.childNodes.length varía. Entonces lo que hay que hacer es borrar un hijo, y no sumar ninguna unidad a i (o restarla para luego sumarla). Porque lo que tiene que hacer es mirar el hijo con el mismo i, que será diferente hijo en este caso.


En los demás navegadores funciona "bien" porque implementan bien el modelo de objetos DOM y los nodos de texto (tanto vacíos como no) los interpretan como nodos, IE se los come, ni los lee. Para IE tenemos 5 hijos, pero para FF he visto 12...

En fin, tu código completo quedaría así, aunque te recomiendo comprobar la propiedad de los nodos nodeType, y mirar si no vale 1. 1 equivale a nodo de texto.

Código PHP:
<head>
<
html>

<
title>Untitled Document</title>
</
head>

<
div id="cont">
    <
div id="a" class="nudso">texto1</div>
    <
div id="b" class="nudso">texto2</div>
    <
div id="c" class="nudso">texto3</div>
    <
div id="d" class="nudso">texto4</div>
    <
div id="e" class="nudo">texto5</div>
</
div>

<
script type="text/javascript">
function 
borrar(){
    var 
lista document.getElementById("cont");
    var 
0;
    
alert("hay "+lista.childNodes.length+" hijos");
    while(
lista.childNodes.length ) {
        
alerti+".className = "+lista.childNodes[i].className);
        if(
lista.childNodes[i].className != "nudo") {
                if(
lista.childNodes[i].nodeName == "DIV") {
                    
lista.removeChild(lista.childNodes[i]);
                    
i--;
                }
            }
        
i++;
    }
}

window.onload borrar;
</script>

</body>
</html> 

Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.