


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны иметь возможность использовать метод .RemoveNode узла или метод .RemoveChild родительского узла.
Если вы хотите очистить div и удалить все дочерние узлы, вы можете указать:
var mydiv = document.getElementById('FirstDiv');
while(mydiv.firstChild) {
mydiv.removeChild(mydiv.firstChild);
}
Вам, вероятно, следует использовать библиотеку JavaScript, чтобы делать такие вещи.
Например, в MochiKit есть функция removeElement, а в jQuery - удалять.
Вы должны удалить все обработчики событий, которые вы установили на узле, прежде чем удалять его, чтобы избежать утечек памяти в IE.
Чтобы ответить на исходный вопрос - есть разные способы сделать это, но самым простым будет следующий.
Если у вас уже есть дескриптор дочернего узла, который вы хотите удалить, то есть у вас есть переменная JavaScript, которая содержит ссылку на него:
myChildNode.parentNode.removeChild(myChildNode);
Очевидно, что если вы не используете одну из многочисленных библиотек, которые уже это делают, вам нужно создать функцию, чтобы абстрагироваться от этого:
function removeElement(node) {
node.parentNode.removeChild(node);
}
Обновлено: Как уже упоминалось другими: если у вас есть какие-либо обработчики событий, подключенные к удаляемому узлу, вам нужно убедиться, что вы отключили их до того, как последняя ссылка на удаляемый узел выйдет за пределы области действия, во избежание плохих реализаций утечки памяти интерпретатора JavaScript.
По «плохим реализациям». Вы имеете в виду IE6, IE7, IE8 или что-то еще? (в частности, есть ли утечки памяти в хороших браузерах? В настоящее время меня больше не интересует IE 6-7.)
@CamiloMartin - в наши дни не уверен в специфике, но, насколько я помню, «хорошие» браузеры должны следить за такими вещами и обрабатывать их. YMMV
Решение jQuery
HTML
<select id = "foo">
<option value = "1">1</option>
<option value = "2">2</option>
<option value = "3">3</option>
</select>
Javascript
// remove child "option" element with a "value" attribute equal to "2"
$("#foo > option[value='2']").remove();
// remove all child "option" elements
$("#foo > option").remove();
Рекомендации:
Селектор атрибута равно [name = value]
Selects elements that have the specified attribute with a value exactly equal to a certain value.
Дочерний селектор («родительский> дочерний»)
Selects all direct child elements specified by "child" of elements specified by "parent"
Similar to .empty(), the .remove() method takes elements out of the DOM. We use .remove() when we want to remove the element itself, as well as everything inside it. In addition to the elements themselves, all bound events and jQuery data associated with the elements are removed.
Используйте следующий код:
//for Internet Explorer
document.getElementById("FirstDiv").removeNode(true);
//for other browsers
var fDiv = document.getElementById("FirstDiv");
fDiv.removeChild(fDiv.childNodes[0]); //first check on which node your required node exists, if it is on [0] use this, otherwise use where it exists.
child.remove()Для вашего варианта использования:
document.getElementById("FirstDiv").remove()
W3C рекомендует это с конца 2015 года и составляет ванильный JS. Все основные браузеры поддерживают его.
Поддерживаемые браузеры - 96% Май 2020 г.
Пожалуйста, отредактируйте, чтобы указать, что такое "предыдущий метод", так как вопросы голосуются за / против и удаляются, в конечном итоге это не имеет окончательного значения.
var p=document.getElementById('childId').parentNode;
var c=document.getElementById('childId');
p.removeChild(c);
alert('Deleted');
p - родительский узел, а c - дочерний узел
parentNode - это переменная JavaScript, содержащая родительскую ссылку
.
Легко понять
node.remove();- это современный способ сделать это.document.getElementById("FirstDiv").remove();для вашего варианта использования