Удалить элемент из DOM только из ссылки на элемент
Это либо очень просто, либо невозможно.
Я знаю, что я могу сделать это:
var element = document.getElementById('some_element');
element.parentNode.removeChild(element);
... но это кажется грязным. Есть ли более простой и универсальный способ сделать то же самое?
Кажется, по крайней мере для меня, что-то вроде этого должно быть:
document.getElementById('some_element').remove();
... но это не работает, и поиск в Google/SO не дал никакой альтернативы.
Я знаю, что это не так важно, но parentNode.removeChild()
просто чувствует себя хакерской / грязной / неэффективной / плохой практикой-у.
3 ответа
Это может показаться немного грязным, но это стандартный способ удаления элемента из его родителя. Сам элемент DOM может существовать сам по себе, без parentNode
, так что имеет смысл, что removeChild
метод на родителя.
ИМО универсальный .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, а не просто отдельный элемент, как описано выше.
Спецификации уровня 4 DOM, похоже, приняли "философию jQuery", заключающуюся в выполнении нескольких операций по изменению DOM (см. https://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html)., Удалить это один из них:
var el = document.getElementById("myEl");
el.remove();
В настоящее время он поддерживается только в более поздних версиях Chrome, Opera, Firefox, но есть некоторые шайбы, чтобы исправить это, если вы хотите использовать эту функциональность в производстве сегодня: https://github.com/Raynos/DOM-shim
Независимо от того, желательно удалить ребенка или нет, я оставляю пока без изменений.
Ваш код является правильным и лучшим способом сделать это.
JQuery имеет то, что вы ищете:
$("#someId").remove();