Динамическое создание и удаление элементов в JavaScript - PullRequest
0 голосов
/ 24 ноября 2010

Я думал, что мне удобно добавлять и удалять элементы в 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();
    }

Это очень неприятно, но я знаю, что коды не ошибаются, пожалуйста, что я делаю не так?

1 Ответ

0 голосов
/ 24 ноября 2010

Прежде всего, почему бы просто не использовать i в качестве индекса в массиве div?Первая строка после начала вашего цикла for должна быть:

 var tempobj=this_object.tempdivs[i];

А затем вы можете удалить эту строку:

 this_object.tempdivs.pop();

Во-вторых, вы можете проверить, чтобы убедиться, чтоЭлемент имеет родителя ( т.е. еще не удален) перед попыткой его удаления:

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

Это изменение предотвратит возникновение ошибки, но не устранит ее причину.Вы должны выяснить, почему.Без какого-либо другого кода я не могу больше ничего сказать.

...