Это может показаться немного сумбурно, но это стандартный способ удаления элемента из его родителя. Сам элемент DOM может существовать самостоятельно, без parentNode
, поэтому имеет смысл, что метод removeChild
находится на родительском устройстве.
Метод IMO общего типа .remove()
на самом узле DOM может ввести в заблуждение, в конце концов, мы не удаляем элемент из существования, просто из его родителя.
Вы всегда можете создать свои собственные обертки для этой функции. Например.
function removeElement(element) {
element && element.parentNode && element.parentNode.removeChild(element);
}
// Usage:
removeElement(document.getElementById('some_element'));
Или использовать библиотеку DOM, как jQuery, которая обеспечивает связку оберток для вас, например, в JQuery:
$('#some_element').remove();
Это редактировать в ответ на ваш комментарий, в котором вы осведомился о возможности расширения родной реализации 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 узлов, а не только отдельного элемента, как выше.
+1, мне нравится ваш метод удаления элемента , но это приводит к второму вопросу - есть ли способ прототипа методов для элементов DOM (который работает повсюду)? Я пробовал «HTMLElement.prototype» и ужасный «Object.prototype», но не работает везде ... – DaveRandom
Да, есть способы заставить его работать, но это считается плохой практикой. Вот почему такие вещи, как jQuery, существуют, чтобы создать полностью отдельный объект, чтобы содержать элементы, с помощью которых вы можете вызывать методы. Вы также можете расширить jQuery. Я добавлю EDIT к моему ответу. Gimme a sec :) – James
Согласился, отбросив мою ненависть к библиотекам вроде jQ (см. Комментарий к другому ответу), все, что вы говорите, верно. – DaveRandom