Метод removeChild
просто удаляет его из своего родителя. Если это видимый элемент страницы, он будет удален со страницы.
Но в Javascript есть сборка мусора. Это означает, что сам объект узла будет существовать до тех пор, пока любая переменная ссылается на него. Таким образом, вы можете назначить узел переменной, использовать removeChild
, чтобы «обрезать» его от родительского узла, а затем вставить или добавить его к другому узлу, тем самым эффективно перемещая его по странице.
Следующий код удалит узел и подождет 10 секунд, прежде чем повторно добавить его в дерево (и, следовательно, на страницу):
var oldNode = someNode.removeChild(...);
setTimeout(function () {
document.documentElement.appendChild(oldNode);
}, 10000);
Это означает, что объект узла не был удален из памяти, поскольку на него все еще есть переменная (а именно, oldNode
).
Другой случай:
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
Если, с другой стороны, вы не переназначаете удаленный узел на другую переменную, к нему больше нельзя получить доступ (не через дерево документов, поскольку он был оттуда удален; и не через переменную JS); поэтому Javascript автоматически удалит его из памяти:
someNode.removeChild(...);
Присвоение удаленного узла переменной, а затем присвоение null
(или чего-либо еще) этой переменной - как предполагает Марк Б в своем ответе - совершенно ненужно и, ИМХО, глупо.