В JavaScript при создании элемента и последующем удалении содержащей переменную элемент остается в DOM? - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть скрипт, который асинхронно загружает изображение src из файла XML. Позже источники назначаются на background из div, а background s меняется каждые 5 секунд. Это хорошо работает, но я хочу предварительно загрузить фактические изображения для отображения уже загруженного изображения. Я делаю это, перебирая массив, создавая img для каждого источника:

for(var i=0; i < clientLogos.lenght; i++){
    var imgHolder = document.createElements("IMG");
    imgHolder.src = clientLogos[i];
}

Трудно сказать разницу, если он был предварительно загружен в стадии разработки, поэтому мой вопрос: Если я удаляю или перезаписываю переменную, содержащую только что созданный элемент, элемент остается в DOM или также удаляется?

Я почти уверен, что он останется, но я хочу спросить у более опытных разработчиков.

Я запутался с этим: document.createElement() вставляет его в DOM или нет?

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

Да. Вновь созданный элемент останется в DOM, если вы явно не удалите его или не перезапишите свойство .innerHTML какого-либо родительского узла.

при удалении («обнуление») imgHolder вы удаляете только ссылку на этот узел.

2 голосов
/ 06 декабря 2010

будет потеряно.единственный способ получить к нему доступ - присвоить его некоторой новой переменной и удалить переменную DOM, в которой хранится ее значение.

1 голос
/ 06 декабря 2010

В данном примере элемент будет освобожден, когда его число reference уменьшится до 0. Необходимо выполнить appendChild или что-то подобное перед записью в эту переменную, чтобы предотвратить его.

var imgHolder;
imgHolder = document.createElement("IMG");  // creates and references new Image
imgHolder.src = 'hello.jpg';                // some manip
/* have to save object here by means of inserting into DOM or merely pushing into array */
/* failure to do so tells JS's garbage collector what old object no longer needed */
imgHolder = document.createElement("IMG");  // deletes old image referenced by variable, creates and refs new one
...