web-dev-qa-db-ja.com

親を知らずにdom要素を削除しますか?

Bodyタグ以外に親がないdom要素を削除することはできますか?これは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;
     }
}   

ありがとう!

36
Matrym

要素の親を取得し、それから要素を削除できるはずです

_function removeElement(el) {
el.parentNode.removeChild(el);
}
_

更新

これをHTMLElementの新しいメソッドとして設定できます。

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

そしてel.remove()を実行します(これも要素を返します)

94
Adam Hopkinson
childDiv.remove();

Chrome 25.0.1364.155で動作します

これはIE11またはOpera Miniでは機能しませんが、他のすべてのブラウザでサポートされています。

ここを参照してください: caniuseのchildnode-removeへの参照

19
swervo

次のようなことができると思います...

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

詳細は node.parentNode を参照してください。

16
Robert K
document.body.removeChild(child);
5
Gregoire

outerHTMLプロパティを使用して要素を削除する

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

function remElement(obj) {
obj.outerHTML="";
}
3
vusan

この関数は、idを使用して要素を単純に削除します。

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

OK、基本的には、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();
_

また、IEおよび古いブラウザにはないネイティブChildNode.remove()もありますが、ポリフィルすることができます。MDNから提案されたポリフィルを見てください。

ポリフィル
Internet Explorer 9以降では、次のコードを使用してremove()メソッドをポリフィルできます。

_//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の link をご覧ください。

1
Alireza