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/

Relaterade artiklar