Ответ 1
Это может показаться немного беспорядочным, но это стандартный способ удаления элемента из его родителя. Сам элемент DOM может существовать самостоятельно, без parentNode
, поэтому имеет смысл, что метод removeChild
находится на родительском.
IMO общий метод .remove()
на самом DOM node может ввести в заблуждение, в конце концов, мы не удаляем элемент из существования, только из его родителя.
Однако вы всегда можете создать свои собственные обертки для этой функции. Например.
function removeElement(element) {
element && element.parentNode && element.parentNode.removeChild(element);
}
// Usage:
removeElement( document.getElementById('some_element') );
Или используйте библиотеку DOM, например jQuery, которая предоставляет вам кучу оберток, например. в jQuery:
$('#some_element').remove();
Это edit соответствует вашему комментарию, в котором вы спрашивали о возможности расширения собственной реализации DOM. Это считается плохой практикой, поэтому вместо этого мы создаем собственные оболочки, чтобы содержать элементы, а затем создаем любые методы, которые мы хотим. Например.
function CoolElement(element) {
this.element = element;
}
CoolElement.prototype = {
redify: function() {
this.element.style.color = 'red';
},
remove: function() {
if (this.element.parentNode) {
this.element.parentNode.removeChild(this.element);
}
}
};
// Usage:
var myElement = new CoolElement( document.getElementById('some_element') );
myElement.redify();
myElement.remove();
Это, по сути, то, что делает jQuery, хотя оно немного более продвинутое, потому что оно обертывает коллекции узлов DOM, а не только отдельный элемент, как указано выше.