¿La función removeChild
realmente elimina completamente el nodo hijo? ¿O simplemente elimina el elemento que es hijo del nodo parant especificado? Si realmente no elimina el elemento, ¿hay alguna manera de eliminar el elemento por completo?¿removeChild realmente elimina el elemento?
Respuesta
El método removeChild
simplemente lo elimina de su matriz. Si es un elemento visible de la página, se eliminará de la página.
Pero Javascript tiene recolección de basura. Esto significa que el objeto nodo en sí mismo seguirá existiendo mientras se refiera a cualquier variable. Para que pueda asignar un nodo a una variable, use removeChild
para 'cortarlo' de su nodo padre, y luego, insertarlo o anexarlo a otro nodo, moviéndolo efectivamente por la página.
El siguiente código eliminar un nodo, y espere 10 segundos antes de volver a agregarlo al árbol (y por lo tanto, a la página):
var oldNode = someNode.removeChild(...);
setTimeout(function() {
document.documentElement.appendChild(oldNode);
}, 10000);
Esto significa que el objeto de nodo no ha sido borrado de la memoria, porque todavía hay una variable que lo señala (es decir, oldNode
).
Otro caso:
var node = document.getElementById('test');
// ... do stuff
node.parentElement.removeChild(node);
// 'node' still exists, but has been removed from the page
// ... do some more stuff
node = document.getElementById('hello');
// The variable 'node' now points to something else;
// this means the original node will be deleted from memory
Si, por el contrario, se No reasignar el nodo eliminado a otra variable, que no se puede acceder más (no a través de la estructura del documento, ya ha sido eliminado de allí, y no a través de una variable JS); así Javascript purgará automáticamente de la memoria:
someNode.removeChild(...);
Asignación del nodo eliminado a una variable, y luego asignar null
(o cualquier otra cosa) a esa variable - como Marc B sugiere en su respuesta - es completamente innecesario y, En mi humilde opinión.
removeChild elimina el elemento del dom, pero también se devuelve de la función en caso de que esté realizando la eliminación para volver a insertarlo en otro lugar. Habría que matar a ese valor de retorno para conseguir realmente deshacerse del nodo eliminado:
oldNode = someNode.removeChild(...);
oldNode = null;
Esto eliminará completamente el nodo:
someNode.removeChild(...);
Esto eliminará el nodo desde el DOM así que no es visible pero la salvará de manera que se puede insertar en otra parte:
oldNode = someNode.removeChild(...);
El primer ejemplo es correcto, pero tuve una situación en la que no parecía funcionar, p.'var aChild = document.createElement (...); someNode.appendChild (aChild); ... someNode.removeChild (aChild); 'El nodo permanece debido a la referencia de la variable aChild. En ese caso, debe 'eliminar un niño' para completar el trabajo. – CyberFonic
Desde otro contexto (donde puede que no sepa si hay otras referencias al nodo eliminado), puede verificar para ver en qué estado se encuentra el nodo eliminado con 'node.parentElement == null' –
Esto no tiene en cuenta otras referencias al nodo. Es decir, si se hace referencia al nodo en otro lugar, 'removeChild' no eliminará completamente el nodo. –
Si realmente quiere eliminar un elemento dom. removeChild solo no es suficiente. Esto es como Steve Sounders, que es el autor de YSlow. Necesita utilizar eliminar
- 1. IE no elimina realmente las galletas
- 2. ¿Por qué removeChild necesita un nodo principal?
- 3. ehcache no elimina Elemento de la memoria sobre el desalojo
- 4. Detectar si un elemento es realmente visible
- 5. El elemento HTML está adjunto a un documento
- 6. ¿La función de eliminación de jQuery realmente elimina los elementos Dom?
- 7. notificación de angularJS cuando se elimina un elemento
- 8. HTML agilidad Paquete removeChild - no se comporta como se esperaba
- 9. Si elimina un elemento DOM, ¿los eventos que comenzaron con ese elemento continúan burbujeando?
- 10. CKeditor elimina etiquetas vacías
- 11. ¡Muere el hilo, realmente!
- 12. La propiedad de dependencia ObservableCollection no se actualiza cuando se elimina el elemento en la colección
- 13. Colección backbone.js que no elimina correctamente el elemento a la vista
- 14. Lucene 3.0.3 no elimina el documento
- 15. Android AndEngine: sprite.detachSelf() no elimina el sprite
- 16. CSS "desbordamiento" elimina el "color de fondo"
- 17. HTML5 Tipo de entrada = número elimina el cero inicial
- 18. ¿Cómo funciona realmente el volátil?
- 19. ¿Está realmente roto el cronómetro?
- 20. ¿Cómo funciona realmente el teléfono?
- 21. ¿Realmente necesita el bloque 'finally'
- 22. ¿Realmente no hay forma de exponer el prototipo de un elemento html en IE (<8)?
- 23. WIX: ¿el atributo Platform del elemento Package está realmente en desuso?
- 24. ¿Cómo puedo ver realmente qué tipo de letra está usando el elemento?
- 25. archivo de imagen no elimina al objeto con el campo ImageField se elimina
- 26. XDocument.Save() elimina mis entidades
- 27. ¿Cuándo elimina Asp.Net los elementos caché caducados?
- 28. PHP str_getcsv elimina diéresis
- 29. ¿Se eliminan los datos almacenados con el método de datos de jquery cuando se elimina el elemento?
- 30. CSS Line-Through no se elimina
Oh gracias :) –
¿No sería simplemente no asignar el valor de retorno a algo que tenga el mismo efecto? – awm
Null es conveniente y lo hace obvio que está destruyendo el valor. haciendo 'oldNode = 'eliminar este nodo, por favor';' parece un desperdicio de caracteres. –