0

この問題に遭遇した2日前まで、jsの要素を追加および削除することに慣れていると思っていました。

わかりました、これは私の問題です:

動的に 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は、作成後に追加する場所であり、実際に追加されます。

私の問題は、作成したdivを削除したいときです

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

これは非常にイライラしますが、コードが間違っていないことはわかっています。何が間違っているのでしょうか?

4

1 に答える 1

0

まず第一に、diviの配列へのインデックスとして使用しないのはなぜですか? for ループの開始後の最初の行は次のようになります。

 var tempobj=this_object.tempdivs[i];

そして、次の行を削除できます。

 this_object.tempdivs.pop();

次に、要素を削除する前に、要素に親がある (つまり、まだ削除されていない)ことを確認する必要がある場合があります。

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

この変更により、エラーは発生しなくなりますが、原因は修正されません。その理由を見つける必要があります。他のコードが投稿されていなければ、他に何も言えません。

于 2010-11-24T05:29:15.677 に答える