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;
}
}
ありがとう!
要素の親を取得し、それから要素を削除できるはずです
_function removeElement(el) {
el.parentNode.removeChild(el);
}
_
更新
これをHTMLElementの新しいメソッドとして設定できます。
_HTMLElement.prototype.remove = function() { this.parentNode.removeChild(this); return this; }
_
そしてel.remove()
を実行します(これも要素を返します)
childDiv.remove();
Chrome 25.0.1364.155で動作します
これはIE11またはOpera Miniでは機能しませんが、他のすべてのブラウザでサポートされています。
ここを参照してください: caniuseのchildnode-removeへの参照
次のようなことができると思います...
var child = document.getElementById(childDiv);
//var parent = document.getElementById(parentDiv);
child.parentNode.removeChild(child);
詳細は node.parentNode を参照してください。
document.body.removeChild(child);
outerHTML
プロパティを使用して要素を削除する
remElement(document.getElementById('title'));
remElement(document.getElementById('alpha'));
function remElement(obj) {
obj.outerHTML="";
}
この関数は、idを使用して要素を単純に削除します。
function removeElement (id) {
document.getElementById(id).parentElement.removeChild(document.getElementById(id));
}
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 をご覧ください。