2010-11-24 12 views
0

私はこの問題に遭遇した2日前にjsの要素を追加したり削除したりするのが楽しいと思っていました。これは私の問題であるJavaScriptで要素を動的に作成および削除する

OK]をクリックして、PLS:

私はページ上のelemntに追加、動的にdivを作成しようとしていた、私は配列で作成した新しいdiv要素にハンドルを追加し、その後ループを実行しますそしてこれは、divを作成するための私のコードです(両方のアレイとページから)の配列に

をすべてのdivを削除します。

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私は作成後に追加ところ、それは、あります実際のあなたは追加されます。

私の問題は、ときに私は

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(); 
    } 

これは非常にイライラさせられるが作成したdivを削除したいですが、私はコードが間違っていないことを知って、私が間違ってやってください何?

+0

JQueryの使用を検討しましたか?この種の作業をはるかに簡単にします。 – ddrace

+0

カスタムコーディングに特に要求された人 –

答えて

0

まず、iをdivの配列のインデックスとして使用しないでください。

var tempobj=this_object.tempdivs[i]; 

そしてあなたは、この行を削除することができます:あなたのforループの開始後最初の行がなければなりません

this_object.tempdivs.pop(); 

第二に、あなたは、要素が親を持っていることを確認するためにチェックすることをお勧めしますそれを削除しようとする前に(すなわちはすでに削除されません):

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

この変更は、エラーの発生を防ぐことができますが、それは私が修正されません原因。理由を調べる必要があります。投稿されたコードは他には何も言えません。

+0

ポップは配列から最後の要素を削除すると思います。最後の要素に興味があります –

関連する問題