Удалить элемент dom, не зная его родителя? - PullRequest
34 голосов
/ 26 ноября 2009

Можно ли удалить элемент dom, у которого нет родителя, кроме тега body? Я знаю, что это было бы легко с такими фреймворками, как jquery, но я пытаюсь придерживаться прямого JavaScript.

Вот код, который я нашел, чтобы сделать это иначе:

function removeElement(parentDiv, childDiv){
     if (childDiv == parentDiv) {
          alert("The parent div cannot be removed.");
     }
     else if (document.getElementById(childDiv)) {     
          var child = document.getElementById(childDiv);
          var parent = document.getElementById(parentDiv);
          parent.removeChild(child);
     }
     else {
          alert("Child div has already been removed or does not exist.");
          return false;
     }
}   

Спасибо!

Ответы [ 7 ]

90 голосов
/ 26 ноября 2009

Вы сможете получить родительский элемент, а затем удалить элемент из этого

.
function removeElement(el) {
el.parentNode.removeChild(el);
}

Обновление

Вы можете установить это как новый метод в HTMLElement:

HTMLElement.prototype.remove = function() { this.parentNode.removeChild(this); return this; }

А затем выполните el.remove() (который также вернет элемент)

19 голосов
/ 18 марта 2013
childDiv.remove();

работает в Chrome 25.0.1364.155

Обратите внимание, что это не работает в IE11 или Opera Mini, но поддерживается всеми другими браузерами.

См. Здесь: ссылка на childnode-remove on caniuse

16 голосов
/ 26 ноября 2009

Я думаю, вы можете сделать что-то вроде ...

var child = document.getElementById(childDiv);
//var parent = document.getElementById(parentDiv);
child.parentNode.removeChild(child);

См. node.parentNode для получения дополнительной информации об этом.

5 голосов
/ 26 ноября 2009
document.body.removeChild(child);
3 голосов
/ 19 сентября 2013

Удаление элемента с использованием outerHTML свойства

remElement(document.getElementById('title'));
remElement(document.getElementById('alpha'));

function remElement(obj) {
obj.outerHTML="";
}
1 голос
/ 17 мая 2017

ОК, вам в принципе не нужно знать родительский элемент для удаления элемента DOM из DOM, посмотрите код ниже, посмотрите, как порядок удаления элемента узла в JavaScript:

Element + parentNode + removeChild(Element);

Как вы видите, мы сначала находим элемент, затем используем .parentNode, а затем снова удаляем дочерний элемент, который является элементом, поэтому нам вообще не нужно знать родителя!

Итак, посмотрите настоящий код:

var navigation = document.getElementById('navigation');
if(navigation) {
  navigation.parentNode.removeChild(navigation);
}

или как функция

function removeNode(element) {
  if(element) { //check if it's not null
    element.parentNode.removeChild(element);
  } 
} //call it like : removeNode(document.getElementById('navigation'));

Также в jQuery есть функция remove (), которая широко используется, например:

$('#navigation').remove();

Также есть нативный ChildNode.remove(), которого нет в IE и старых браузерах, но вы можете его заполнить, посмотрите предложенный полифайл из MDN:

Polyfill
Вы можете заполнить метод remove () в Internet Explorer 9 и выше. со следующим кодом:

//from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md
(function (arr) {
  arr.forEach(function (item) {
    if (item.hasOwnProperty('remove')) {
      return;
    }
    Object.defineProperty(item, 'remove', {
      configurable: true,
      enumerable: true,
      writable: true,
      value: function remove() {
        this.parentNode.removeChild(this);
      }
    });
  });
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);

Если вы хотите узнать больше об этом, перейдите по этой ссылке в MDN.

1 голос
/ 06 декабря 2016

Эта функция просто удаляет элемент, используя id:

function removeElement (id) { 
  document.getElementById(id).parentElement.removeChild(document.getElementById(id));
}
...