Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как понять, что элемент точно удалён из Dom (https://javascript.ru/forum/misc/37926-kak-ponyat-chto-ehlement-tochno-udaljon-iz-dom.html)

Slavchic 14.05.2013 04:22

Как понять, что элемент точно удалён из Dom
 
Имеется линк на созданный div = document.createElement('div')
После удаления самого объекта из Dom через .removeChild, линк всё также возращает объект и его свойства.

Кто-нибудь может подсказать по каким свойствам можно понять, ведёт линк на реальный объект или удалённый.


<html>
<body></body>
<script>

empty_inner_html = function(obj){while (obj.hasChildNodes()) obj.removeChild(obj.firstChild)}


a = document.createElement('input'); a.value = 123
b = document.createElement('div')
c = document.createElement('div')

b.appendChild(a)
c.appendChild(b)
document.body.appendChild(c)


setTimeout(function(){
	empty_inner_html(document.body)
	console.log(a.value)
},2000)
 

</script>
</html>

Slavchic 14.05.2013 05:30

пока есть идея проверять это такой функцией. Когда элемент существует в доме, то el.parentNode.parentNode.итд. рано или поздно доберётся до document.body. У удалённого элемента проход по el.parentNode никогда нарвётся на document.body

function is_el_real(el){
	var el_p = el.parentNode
	
	while(el_p) {
		if (el_p == document.body) return true
		el_p = el_p.parentNode
	}
	return false
}

danik.js 14.05.2013 06:28

Цитата:

Сообщение от Slavchic
Кто-нибудь может подсказать по каким свойствам можно понять, ведёт линк на реальный объект или удалённый.

Объект реальный всегда. Он не может быть виртуальным. Он просто может находиться в DOM-модели страницы, и ли не находиться в ней :)

А проверить это поможет https://developer.mozilla.org/en-US/.../Node.contains

Slavchic 14.05.2013 18:12

Цитата:

Сообщение от danik.js (Сообщение 250362)
Объект реальный всегда.
А проверить это поможет https://developer.mozilla.org/en-US/.../Node.contains

Неправильно выразился ).

Спасибо

qwerty-клавиатура 14.05.2013 19:14

if ( el = document.getElementById(x) ) {
// делаем что-то
}
else {
// элемента с таким id нет
}

qwerty-клавиатура 14.05.2013 19:16

впрс прочитал не внимательно

nerv_ 15.05.2013 01:49

возможно, будет полезно http://learn.javascript.ru/memory-leaks

Цитата:

Сообщение от Slavchic
Имеется линк на созданный div = document.createElement('div')
После удаления самого объекта из Dom через .removeChild, линк всё также возращает объект и его свойства.

пока существуют ссылки, сборщик мусора не сможет удалить объект


Часовой пояс GMT +3, время: 03:56.