Foros del Web » Programando para Internet » Javascript »

removeChild internet explorer problemas.

Estas en el tema de removeChild internet explorer problemas. en el foro de Javascript en Foros del Web. Saludos tengo este script que funciona en el firefox, mozilla, opera, safari etc menos en el internet explorer nose cual es el problema aparte del ...
  #1 (permalink)  
Antiguo 03/07/2007, 16:11
 
Fecha de Ingreso: diciembre-2003
Mensajes: 82
Antigüedad: 20 años, 5 meses
Puntos: 1
removeChild internet explorer problemas.

Saludos tengo este script que funciona en el firefox, mozilla, opera, safari etc menos en el internet explorer nose cual es el problema aparte del IE, el problema que tiene el IE es que solo me remueve el primer child y todos los demas me los remueven todo les agradeceria la ayuda.

el script:

Código:
function borrar()
{

var lista = document.getElementById("cont");



i = 0;

while(i < lista.childNodes.length)
{

if(lista.childNodes[i].className != "nudo")
	{
		
		if(lista.childNodes[i].nodeName == "DIV")
		{
		
		lista.removeChild(lista.childNodes[i]);
		
		}

	}


i++;
}
el html:

Código HTML:
<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>
<input type="button" onclick="borrar();" value="crear" />
<body>
</body>
</html> 
  #2 (permalink)  
Antiguo 03/07/2007, 19:42
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 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.
  #3 (permalink)  
Antiguo 03/07/2007, 19:58
 
Fecha de Ingreso: diciembre-2003
Mensajes: 82
Antigüedad: 20 años, 5 meses
Puntos: 1
Re: removeChild internet explorer problemas.

hola derkenuke muchas gracias por la ayuda, tienes razon ya habia probado con los alert y el IE borraba el primero y se comia el segundo luego borraba el tercero y se comia el cuarto y asi sucesivamente, como tu dices el IE no lee los child tipo texto, voy aprobar la funcion que has puesto te agradesco mucho la ayuda..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.