Rimuovere l'elemento dom senza conoscerne il genitore?
-
05-07-2019 - |
Domanda
È possibile rimuovere un elemento dom che non ha un genitore diverso dal tag body? So che sarebbe facile con un framework come jquery, ma sto cercando di seguire javascript direttamente.
Ecco il codice che ho trovato per farlo diversamente:
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;
}
}
Grazie!
Soluzione
Dovresti essere in grado di ottenere il genitore dell'elemento, quindi rimuovere l'elemento da quello
function removeElement(el) {
el.parentNode.removeChild(el);
}
Aggiorna
Puoi impostarlo come nuovo metodo sul HTMLElement:
HTMLElement.prototype.remove = function() { this.parentNode.removeChild(this); return this; }
E poi el.remove ()
(che restituirà anche l'elemento)
Altri suggerimenti
childDiv.remove();
funziona in Chrome 25.0.1364.155
Nota che questo non funziona in IE11 o Opera Mini ma è supportato da tutti gli altri browser.
Penso che tu possa fare qualcosa come ...
var child = document.getElementById(childDiv);
//var parent = document.getElementById(parentDiv);
child.parentNode.removeChild(child);
Vedi node.parentNode per ulteriori informazioni al riguardo.
document.body.removeChild(child);
Rimozione dell'elemento mediante la proprietà outerHTML
remElement(document.getElementById('title'));
remElement(document.getElementById('alpha'));
function remElement(obj) {
obj.outerHTML="";
}
Questa funzione per rimuovere semplicemente un elemento usando id:
function removeElement (id) {
document.getElementById(id).parentElement.removeChild(document.getElementById(id));
}
OK, fondamentalmente non è necessario conoscere il genitore per eliminare un elemento DOM da DOM, guardare il codice seguente, vedere come è l'ordine di eliminare un elemento nodo in JavaScript:
Element
+ parentNode
+ removeChild(Element);
Come vedi, troviamo prima l'elemento, quindi usando .parentNode e poi rimuoviamo il figlio che è di nuovo l'elemento, quindi non abbiamo bisogno di conoscere il genitore!
Quindi ora guarda il vero codice:
var navigation = document.getElementById('navigation');
if(navigation) {
navigation.parentNode.removeChild(navigation);
}
o come funzione
function removeNode(element) {
if(element) { //check if it's not null
element.parentNode.removeChild(element);
}
} //call it like : removeNode(document.getElementById('navigation'));
Anche jQuery ha la funzione remove () che è ampiamente usata, come:
$('#navigation').remove();
Esiste anche il ChildNode.remove ()
nativo che non si trova in IE e nei vecchi browser, ma è possibile eseguire il polyfill, guarda il polyfill suggerito da MDN:
Polyfill
È possibile eseguire il polyfill del metodo remove () in Internet Explorer 9 e versioni successive con il seguente codice:
//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]);
Se vuoi saperne di più, visita questo link su MDN.