Foros del Web » Programando para Internet » Javascript »

Error al tratar de eliminar un nodo hijo de un div

Estas en el tema de Error al tratar de eliminar un nodo hijo de un div en el foro de Javascript en Foros del Web. Hola maestros, estoy tratando de eliminar un nodo p que es hijo de un div y no me deja y no entiendo porque, bueno en ...
  #1 (permalink)  
Antiguo 31/12/2007, 15:40
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 1 mes
Puntos: 16
Error al tratar de eliminar un nodo hijo de un div

Hola maestros, estoy tratando de eliminar un nodo p que es hijo de un div y no me deja y no entiendo porque, bueno en el código sale como agrego nodos al div y como trato de eleminarlos espero me puedan ayudar.

Código:
function upload(type,max) {
    if(type == 'single') {
        var form = document.getElementById('form');
    
        form.submit();
        
        var file = document.getElementById('file');
        var nAttachment = document.getElementById('nAttachment').value;
        var div = document.getElementById('inputFile');
    
        document.getElementById('nAttachment').value = ++nAttachment;
        var p = document.createElement('p');
        
        p.id = 'p' + nAttachment;
    
        if(document.getElementById('nAttachment').value == 1) {
            var files = document.createTextNode('Archivos:')
        
            div.appendChild(files);
        }
    
        var img = document.createElement('img');
    
        img.src = 'images/wait.gif';
        img.alt = 'Porfavor espere...';
        img.id = nAttachment;
        img.width = '20';
        img.height = '20';
        
        var text = document.createTextNode(file.value);
        
        p.appendChild(img);
        p.appendChild(text);

        div.appendChild(p);
        
        file.value = '';

        if(nAttachment == max) {
            file.disabled = true;
        }
    }
}

function uploadResult(status,file,id) {
    id++;
    
    if(status == 0) {
        var p = document.createElement('p');
        
        p.id = id;
        
        var img = document.createElement('img');
        
        img.src = 'images/ok.gif';
        img.alt = 'Archivo subido correctamente';
        img.width = '20';
        img.height = '20';
        
        p.appendChild(img);
        
        var aFile = document.createElement('a');
        
        aFile.href= 'archivos/' + file;
        aFile.innerHTML = file; 
        
        p.appendChild(aFile);
        
        var text = document.createTextNode(' - ');
        
        p.appendChild(text);
        
        var aDeleteFile    = document.createElement('a');
        
        aDeleteFile.href = 'delete.php?id=' + id + '&file=' + file;        
        aDeleteFile.target = 'iframeUpload';
        aDeleteFile.innerHTML = 'Eliminar';
        
        p.appendChild(aDeleteFile);
        
        var div = document.getElementById('inputFile');
        
        div.replaceChild(p,document.getElementById('p' + id));
    } 
    else if(status == 1) {
        var nAttachment = document.getElementById('nAttachment').value;
        var img = document.getElementById(nAttachment);
        
        var msg = alert('Error! - El Archivo no llego al servdor');
        img.src = 'images/error.gif';
        img.alt = 'El Archivo no llego al servdor';
        img.width = '20';
        img.height = '20';
    }
    else if(status == 2) {
        var nAttachment = document.getElementById('nAttachment').value;
        var img = document.getElementById(nAttachment);

        var msg = alert('Error! - No se pudo copiar Archivo. Posible problema de permisos en server');
        img.src = 'images/error.gif';
        img.alt = 'No se pudo copiar Archivo. Posible problema de permisos en server';
        img.width = '20';
        img.height = '20';
    }
}

function deleteResult(nFile) {
    var div = document.getElementById('inputFile');
    var p = document.getElementById('p' + nFile);
    
    div.removeChild(p);
}
al correrlo y llamar a deleteResult me tira error (firebug) en la linea

div.removeChild(p);

y el error que tira es

uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.removeChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://localhost/upload/dinamicAttachment.js :: deleteResult :: line 111" data: no]

Bueno eso agradeceria cualquier tipo de ayuda.

Saludos y feliz 2008!
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 01/01/2008, 02:33
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 8 meses
Puntos: 1284
Re: Error al tratar de eliminar un nodo hijo de un div

Hola:

Si el nodo existe, solo puede borrarse desde su parentNode, así que una solución infalible no usar el objeto div sino el padre del objeto... pero parece que puede fallar la referencia...

if (p == undefined) alert('nodo inexistente')
else p.parentNode.removeChild(p)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 02/01/2008, 09:05
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 1 mes
Puntos: 16
Re: Error al tratar de eliminar un nodo hijo de un div

muchas gracias caricatos me funcionó de maravillas, de hecho en un principio me decia nodo no existente pero era porque originalemente en upload le daba

p.id = 'p' + nAttachment;

y en uploadResult le daba

p.id = id;

en vez de darle

p.id = 'p' + id;

Saludos y gracias
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
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 19:55.