javascript - Ta bort element efter id
När du tar bort ett element med standard JavaScript måste du först gå till dess förälder:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Att behöva gå till föräldranoden först verkar lite konstigt för mig, finns det en anledning till att JavaScript fungerar på det här sättet?
Svar #1
Jag vet att det inte alltid är den bästa eller mest populära lösningen att förstärka inbyggda DOM-funktioner, men detta fungerar bra för moderna webbläsare.
Element.prototype.remove = function() {
this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
for(var i = this.length - 1; i >= 0; i--) {
if(this[i] && this[i].parentElement) {
this[i].parentElement.removeChild(this[i]);
}
}
}
Och sedan kan du ta bort element som detta
document.getElementById("my-element").remove();
eller
document.getElementsByClassName("my-elements").remove();
Obs: denna lösning fungerar inte för IE 7 och tidigare. För mer information om att utöka DOM, läs den här artikeln.
REDIGERA: När jag granskar mitt svar från 2019 har node.remove() visat sig vara till hjälp och kan användas på följande sätt (utan polyfillen ovan):
document.getElementById("my-element").remove();
eller
[...document.getElementsByClassName("my-elements")].map(n => n && n.remove());
Dessa funktioner finns tillgängliga i alla moderna webbläsare (inte IE). Läs mer på MDN.
Svar #2
Crossbrowser och IE >= 11:
document.getElementById("element-id").outerHTML = "";
Svar #3
Du skulle kunna skapa en remove-funktion så att du inte behöver tänka på det varje gång:
function removeElement(id) {
var elem = document.getElementById(id);
return elem.parentNode.removeChild(elem);
}
Svar #4
Uppdatering 2011
Detta lades till i DOM-specifikationen redan 2011, så du kan bara använda:
element.remove()
DOM är organiserad i ett träd av noder, där varje nod har ett värde, tillsammans med en lista över referenser till dess barnnoder. Så element.parentNode.removeChild(element) efterliknar exakt vad som händer internt: Först går du till föräldranoden, sedan tar du bort referensen till barnnoden.
Från och med DOM4 finns en hjälpfunktion som gör samma sak: element.remove(). Detta fungerar i 96 % av webbläsarna (från och med 2020), men inte i IE 11.
Om du behöver stödja äldre webbläsare kan du:
- Ta bort element via föräldernoden
- Ändra de inbyggda DOM-funktionerna, som i Johan Dettmars svar, eller
- Använd ett DOM4-polyfill.
Svar #5
Det är vad DOM stöder. Sök på den sidan efter "remove" eller "delete" och removeChild är den enda som tar bort en nod.
Svar #6
För att ta bort ett element:
var elem = document.getElementById("yourid");
elem.parentElement.removeChild(elem);
För att ta bort alla element med till exempel ett visst klassnamn:
var list = document.getElementsByClassName("yourclassname");
for(var i = list.length - 1; 0 <= i; i--)
if(list[i] && list[i].parentElement)
list[i].parentElement.removeChild(list[i]);
Svar #7
du kan bara använda element.remove()
Svar #8
Du kan direkt ta bort det elementet genom att använda remove()-metoden i DOM.
här är ett exempel:
let subsWrapper = document.getElementById("element_id");
subsWrapper.remove();
//OR directly.
document.getElementById("element_id").remove();
Svar #9
Metoden ChildNode.remove() tar bort objektet från trädet det tillhör.
https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Här är en fiddle som visar hur du kan anropa document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Det finns inget behov av att utöka NodeList. Det har redan implementerats.
**
Svar #10
Enligt DOM nivå 4-specifikationerna, som är den nuvarande versionen under utveckling, finns det några nya praktiska muteringsmetoder tillgängliga: append(), prepend(), before(), after(), replace() och remove().
https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
