2010-11-24 6 views
0

Je pensais que j'étais à l'aise avec l'ajout et la suppression d'éléments dans js jusqu'à il y a deux jours quand j'ai rencontré ce problème.Créer dynamiquement et supprimer des éléments en javascript

Ok, pls ceci est mon problème:

je tentais de créer dynamiquement divs, ajoutez à un elemnt sur la page, ajoutez une poignée à la nouvelle div j'ai créé dans un tableau, puis exécutez une boucle plus tard et supprimer tous les divs dans le tableau (à la fois du tableau et la page)

Ceci est mon code pour créer les divs:

var this_object=this;this.tempdivs=new Array();var thandle=''; 

var t=document.createElement('div');var br=document.createElement('br'); 
var txt=document.createTextNode(content_body); 
t.appendChild(content);t.appendChild(txt);t.appendChild(br); 
thandle=this_object.chat_rec_handle.appendChild(t); 
this_object.tempdivs.push(thandle); 

this_object.chat_rec_handle est là où je joins après la création, il réel ly est ajouté.

Mon problème est quand on veut supprimer les divs que j'ai créé

var divlength=this_object.tempdivs.length; 
    for(var i = 0; i < divlength; i++) 
    { 
    var tempobj=this_object.tempdivs[this_object.tempdivs.length-1]; 
    alert(tempobj.parentNode); 
/* this alert gives me null, does that mean the parent no longer exists? */ 
    tempobj.parentNode.removeChild(tempobj); 
    this_object.tempdivs.pop(); 
    } 

Cela est très frustrant, mais je sais que les codes ne sont pas mal, s'il vous plaît ce que je fais mal? Tout d'abord, pourquoi ne pas simplement utiliser i comme index dans le tableau de divs?

+0

Avez-vous envisagé d'utiliser JQuery? Cela rend ces types de tâches beaucoup plus faciles. – ddrace

+0

la personne spécifiquement demandée pour le codage personnalisé –

Répondre

0

La première ligne après le début de votre boucle doit être:

var tempobj=this_object.tempdivs[i]; 

Et vous pouvez supprimer cette ligne:

this_object.tempdivs.pop(); 

Deuxièmement, vous pouvez vérifier pour vous assurer que l'élément a un parent (c.-à- n'a pas déjà été) avant d'essayer de l'enlever:

tempobj.parentNode && tempobj.parentNode.removeChild(tempobj); 

ce changement permettra d'éviter l'erreur de se produire, mais il ne résoudra pas i ts cause. Vous devrez découvrir pourquoi. Sans aucun autre code affiché, je ne peux rien dire d'autre.

+0

Je pense que pop supprime le dernier élément de tableau, je n'ai pas utilisé 'i' cos im intéressé par le dernier élément –

Questions connexes