Dans la plupart des navigateurs, il existe un moyen un peu plus succinct de supprimer un élément du DOM que d'appeler .removeChild(element)
son parent, qui consiste simplement à appeler element.remove()
. En temps voulu, cela deviendra probablement le moyen standard et idiomatique de supprimer un élément du DOM.
La .remove()
méthode a été ajoutée au DOM Living Standard en 2011 ( validation ) et a depuis été mise en œuvre par Chrome, Firefox, Safari, Opera et Edge. Il n'était pris en charge dans aucune version d'Internet Explorer.
Si vous souhaitez prendre en charge les anciens navigateurs, vous devrez le caler. Cela s'avère un peu irritant, à la fois parce que personne ne semble avoir créé un shim DOM polyvalent contenant ces méthodes, et parce que nous ne sommes pas en train d'ajouter la méthode à un seul prototype; c'est une méthode de ChildNode
, qui n'est qu'une interface définie par la spécification et qui n'est pas accessible à JavaScript, nous ne pouvons donc rien ajouter à son prototype. Nous devons donc trouver tous les prototypes qui héritent ChildNode
et sont réellement définis dans le navigateur, et y ajouter .remove
.
Voici le shim que j'ai trouvé, dont j'ai confirmé le fonctionnement dans IE 8.
(function () {
var typesToPatch = ['DocumentType', 'Element', 'CharacterData'],
remove = function () {
// The check here seems pointless, since we're not adding this
// method to the prototypes of any any elements that CAN be the
// root of the DOM. However, it's required by spec (see point 1 of
// https://dom.spec.whatwg.org/#dom-childnode-remove) and would
// theoretically make a difference if somebody .apply()ed this
// method to the DOM's root node, so let's roll with it.
if (this.parentNode != null) {
this.parentNode.removeChild(this);
}
};
for (var i=0; i<typesToPatch.length; i++) {
var type = typesToPatch[i];
if (window[type] && !window[type].prototype.remove) {
window[type].prototype.remove = remove;
}
}
})();
Cela ne fonctionnera pas dans IE 7 ou inférieur, car l' extension des prototypes DOM n'est pas possible avant IE 8 . Je pense, cependant, qu'à la veille de 2015, la plupart des gens n'ont pas à se soucier de telles choses.
Une fois que vous les aurez inclus, vous pourrez supprimer un élément DOM element
du DOM en appelant simplement
element.remove();